Gfortranマニュアルから:
Fortran 2003 標準以降、組み込みFLUSH
よりも優先すべきステートメントがあります。FLUSH
FLUSH
組み込み文と Fortran 2003 文の効果FLUSH
は同じです。これらはランタイム ライブラリの I/O バッファをフラッシュして、データが他のプロセスから見えるようにします。これは、データがディスクにコミットされることを保証するものではありません。
POSIX システムでは、I/O ユニットの POSIX ファイル記述子 (GNU 組み込み FNUM で取得) を引数として fsync 関数を呼び出すことにより、すべてのデータをストレージ デバイスに転送するように要求できます。次の例は、その方法を示しています。
! Declare the interface for POSIX fsync function
interface
function fsync (fd) bind(c,name="fsync")
use iso_c_binding, only: c_int
integer(c_int), value :: fd
integer(c_int) :: fsync
end function fsync
end interface
! Variable declaration
integer :: ret
! Opening unit 10
open (10,file="foo")
! ...
! Perform I/O on unit 10
! ...
! Flush and sync
flush(10)
ret = fsync(fnum(10))
! Handle possible error
if (ret /= 0) stop "Error calling FSYNC"