我已经阅读了有关使用ifort启用缓冲I / O的英特尔文档(使用-assume buffered_io
或FORT_BUFFERED=true
),并且这适用于直接输出到文件。 但是,我们有大量的应用程序正在写入标准输出(例如write(*,*)
或write(stdout,*)
),这被redirect到一个文件。 在这种情况下,缓冲技术都不起作用。
除了重构代码直接写入文件,有没有办法使用ifort在标准输出上启用缓冲I / O? 例如,gfortran默认启用。
我们在SLES 11上使用ifort 12.0。
更新:感谢您的意见。 我正在调查stdbuf和/或通过一个缓冲程序(如三通)pipe道作为一种解决方法。 到目前为止,我还没有能够做出明显的改变。
更新2:
我试了一下道格拉斯的build议,通过另外一个程序。 发球台和猫都缓冲,面对缓冲似乎由pipe道本身约8K完成。 但是,原始write()调用的开销,再加上pipe道,再加上pipe道程序(tee,cat等)的系统调用太高,无法实现这个解决scheme。