2009-10-07 9 views
8

私はループの各反復の出力ファイルに数値を出力するFortran 90プログラムでループを実行しています。問題は、出力がファイルに保存されるのではなく、非常に多くのステップごとに保存されるということです。どのようにして各ステップをフラッシュするのですか?gfortran Fortran 90プログラムで各書き込みを行った後に、出力をファイルにフラッシュするにはどうすればよいですか?

コード例:事前に

open(unit=1,file='output') 

do i = 1, 1000 
write(1,*) i 
end do 

close(unit=1) 

感謝。

答えて

6

gfortranが実装している場合は、非標準サブルーチンをフラッシュします。すべてのコンパイラがこれを実装するわけではありません。

+4

'FLUSH'は非標準ですが、' FLUSH'文は有効なFortran 2003のです: 'FLUSH(10)' –

+0

GNUのウェブサイトから、それは言う: FLUSH組み込み関数とFortran 2003 FLUSH文は、同じ効果があります。ランタイム・ライブラリのI/Oバッファをフラッシュして、データが他のプロセスから見えるようにします。これは、データがディスクにコミットされたことを保証するものではありません。 –

12

出力をバッファリングしないでください。 GFORTRAN_UNBUFFERED_ALL環境変数を 'y'、 'Y'または1に設定してみてください。

+0

私はbashのからこれを行うだろうか? 好奇心が強いですか? – banDedo

+0

はい、エクスポート行に '$'は必要ありません。これは現在のシェルを終了するまで機能します。この動作を永続的にしたいのであれば、それらの行を '.bashrc'ファイルに追加したいかもしれません。 –

+0

は、私は、次の処方を試してみましたし、私が入力した: GFORTRAN_UNBUFFERED_ALL =「Y」 輸出GFORTRAN_UNBUFFERED_ALL は$ GFORTRAN_UNBUFFERED_ALL はエコーが適正値を印刷エコー。 私はこれを 'y'、 'Y'、および1で試しました。問題を解決したものはありません。しかし、提案していただきありがとうございます。 – banDedo

0

フラッシュする必要があるときは、ファイルを閉じてもう一度開くだけです。これは不器用で遅いですが、私はすべてのコンパイラで動作するfortran 90の方が良い方法はわかりません。 GFORTRAN_UNBUFFERED_ALL = 'Y' 輸出の$ GFORTRAN_UNBUFFERED_ALL を次のように

関連する問題