如果你有先见之明写沿
write(write_unit,*) stuff_to_write
行所有write
声明这将是非常简单的,你可以简单地连接到write_unit
文件而不是stdout
。我想你已经知道,或者你不会问这个问题。如果您write
语句的形式为
write(*,*)
或
print *
那么你或许可以重定向输出从编译器的帮助不大。例如,英特尔Fortran会将指向*
的输出发送到控制台,除非程序发现自己在变量FOR_PRINT
设置为某个文件或其他文件的名称的环境中执行,在这种情况下,write(*,*)
将写入该文件。我希望其他编译器具有类似的功能。
如果你的代码的预期使用
write(6,*)
该单位6点stdout
你可以在一个文件
open(unit = 6, file = 'stdout_redirect', status = 'new')
打开单元6对于任何更多你最好告诉我们,你写语句看起来像你正在使用的编译器。
编辑
在OP的编辑问题后。这是一个评论比答案更多,但我很啰嗦......
不幸的是,从可移植性的角度来看,许多Fortran程序与底层计算机系统的交互没有在标准中定义。你的问题在哪里输出发送到单位*
去是一个例子;最新的(2008)标准指出,它必须与内在模块iso_fortran_env
中的命名常量output_unit
确定的单位相同。但是它并没有说到stdout
(在没有stdout
的系统上已经有很多Fortran实现),并且它没有指定如何重定向该输出,或者即使可以这样做。输出重定向是平台问题,而不是Fortran。正如我们发现英特尔Fortran可以使用环境变量重定向输出,显然Cray Fortran不能。
最新标准完全没有提到文件描述符的主题,我不确定它是Fortran已知的概念。
对于I/O使用*
实质上是说它取决于编译器/运行时系统,输入来自输出并转到输出。如果你想要可移植性,你必须控制并使用特定的单元标识。就我个人而言,我认为你应该在下面的评论中采纳@乔治的建议。
至于你添加的问题 - 你尝试这个时发现了什么? – 2014-09-23 05:29:53
那么,我发现的是非常不相关的,因为我需要可移植性和可移植性由标准来保证。我可能需要知道如何根据fortan标准处理文件描述符,但我不确定这些影响可能是什么。不过,你应该得到一个答案......是的,它的工作。所有后续输出按预期重定向到文件。 – Spiros 2014-09-23 07:58:31