回 帖 发 新 帖 刷新版面

主题:linux下gfortran编译出的程序,写不了文件怎么回事啊

遇到了一个很诡异的错误,在linux系统下用fortran编译程序,程序最开始是open语句打开文件这都没有错,但是往文件里写内容却怎么也写不进去。为了验证一下,我把该往文件里写的内容用write(*,*)输出到屏幕上,屏幕上可以输出。为啥往文件里写写不进去呢?
我的程序原来一直在window下用intel编译器编译运行,是没有任何错误的。
有高手大侠麻烦帮帮忙,我都快崩溃了。

回复列表 (共18个回复)

11 楼

文件写缓冲太大了吧。不过gfortran写文件的效率确实不如ivf。

12 楼

缓冲太大了呗
设置GFORTRAN_UNBUFFERED_ALL环境变量为1

13 楼

明白了,问题解决了,在每步的最后加上一句call flsuh()就行了,把缓冲区的内容都写到该写的地方上去就行了
造成这个问题的原因是linux系统,还是gfortran编译器,或者是曙光的集群?

14 楼

编译器。

15 楼

[quote]编译器。[/quote]
只能说先看硬件,再看系统,再看编译器

16 楼

flsuh() 做同步会不会导致程序效率降低?

17 楼

flush()除了清理缓存区,还有同步作用吗?它是把什么同步了呢?
我的程序一共6000步循环,每次循环到最后了写数据,写的数据量很小,就几百个K吧,这样加上flush()语句后会产生多大的不利影响呢?
谢谢

18 楼

肯定会慢的,你想想每次flush都要IO操作,本来是默认是缓冲满了再一起写入的。
记得综合来看,8192K的内存缓冲最佳,因为大于8192时,已经不提高IO性能了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册