1

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

提前致谢!

4

2 回答 2

3

如果@Janneb 建议的非标准解决方案没有吸引力,我建议将参数传递给 Fortran 程序,告诉它将输出发送到哪里。然后程序可以确定是否允许编写您的编码。如果您选择这条路线,您可以使用 (Fortran 2003) 内在子例程get_command_argument

于 2012-10-10T08:49:18.420 回答
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 单元(在 gfortran 中,FNUM 内部)相对应的系统文件描述符 (fd),您可以使用它来获取 fd 的标准输出单元,然后您可以使用 ISO_C_BINDING 在 fd 上调用 isatty()。

于 2012-10-10T09:10:46.873 回答