来自 Gfortran手册:
从 Fortran 2003 标准开始,有一个FLUSH
语句应该优于FLUSH
内在语句。
FLUSH
内在语句和 Fortran 2003语句具有相同的FLUSH
效果:它们刷新运行时库的 I/O 缓冲区,以便数据对其他进程可见。这并不能保证将数据提交到磁盘。
在 POSIX 系统上,您可以通过调用 fsync 函数请求将所有数据传输到存储设备,并将 I/O 单元的 POSIX 文件描述符作为参数(使用 GNU 内部 FNUM 检索)。以下示例显示了如何:
! 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"