我想知道在编写Fortran代码时如何检查标准输出是否已被重定向。因为我在输出中添加了编码以使它们变得丰富多彩,这在重定向发生时不起作用。因此,如果是这样,则应禁用编码。
提前致谢!
答案 0 :(得分:3)
如果@Janneb建议的非标准解决方案没有吸引力,我建议将一个参数传递给Fortran程序,该程序告诉它在哪里发送它的输出。然后程序可以确定是否启用编写您的编码。如果选择此路由,则可以使用(Fortran 2003)内在子例程get_command_argument
。
答案 1 :(得分:2)
最简单的工作方式,但可能是编译器特定的,是使用编译器扩展来访问isatty()函数(在gfortran中,ISATTY内部函数)。请考虑以下代码
program test_isatty
use iso_fortran_env
write(*, *) isatty(output_unit)
end program test_isatty
运行它
$ ./isatty
T
$ ./isatty > foo
$ cat foo
F
如果你的Fortran编译器没有isatty扩展,但附带了一个扩展来获取对应于Fortran单元的系统文件描述符(fd)(在gfortran,FNUM内在),你可以用它来获取fd为标准输出单元,然后您可以使用ISO_C_BINDING在fd上调用isatty()。