如何检查输出是否已在Fortran中重定向?

时间:2012-10-10 07:31:09

标签: fortran

我想知道在编写Fortran代码时如何检查标准输出是否已被重定向。因为我在输出中添加了编码以使它们变得丰富多彩,这在重定向发生时不起作用。因此,如果是这样,则应禁用编码。

提前致谢!

2 个答案:

答案 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()。

相关问题