每次使用gfortran Fortran 90程序写入后,如何将输出刷新到文件?

时间:2009-10-07 19:36:20

标签: fortran flush gfortran

我在Fortran 90程序中运行一个循环,它为循环的每次迭代输出数值到输出文件。问题是输出没有保存到文件中,而是保存了很多步骤。如何让它冲洗每一步?

示例代码:

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

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

close(unit=1)

提前致谢。

4 个答案:

答案 0 :(得分:12)

您需要使输出无缓冲。尝试将GFORTRAN_UNBUFFERED_ALL环境变量设置为“y”,“Y”或1。

答案 1 :(得分:6)

另一方面,如果gfortran实现它,则调用非标准子例程flush。并非所有编译器都能实现这一点。

答案 2 :(得分:0)

当我需要刷新时,我只需关闭文件并重新打开。这是笨拙和缓慢的,但我不知道在fortran 90中有更好的方法可以与所有编译器一起使用。

答案 3 :(得分:0)

“ user152979”提出的建议非常出色且很有帮助-十年后!我正在使用MS-DOS Fortran 5.1内置的prgm将程序和数据传输到定制的Z80 SBC(单板计算机)。这个东西是一个小的原型,并且只有串行端口。为了使其与实验性奔腾MMX板(运行MS-DOS)一起使用,我需要一个小的读写程序。 Fortran符合要求,.EXE则适合软盘(MMX板上没有Internet访问权限)。但是,如果我写入COM1端口,则下载到Z80的数据将变得混乱。

结果证明,Fortran正在缓冲数据。在Z80上,我仅获得每10条记录中的一部分。关闭COM1文件(输出设备)并在写入每条文本记录后重新打开,导致缓冲区被刷新,并且小的Fortran下载器(和Z80 SBC)现在可以正常工作。

因此,即使您的Fortran版本不支持“ FLUSH”运算符,也要关闭并立即重新打开文件 可以很好地将缓冲区内容刷新到设备。

关于使用DOS写入COM1端口的附带说明:我必须将串行端口RS-232c的CTS引脚绑在DTR,DCD和DSR引脚上,以便MS-DOS可以“看到”并写入串行端口。在更高版本的MS-DOS(即“ Windows”)中,可以使用MODE命令将COM端口RTS和CTS值设置为OFF,但是对于原始DOS,则需要使用烙铁。并且,您需要在每次记录写入后刷新所有缓冲的数据。 User152979说这种关闭和重新打开是“笨拙且缓慢的”,但就我而言,此技巧非常有效。