我想知道在编写 Fortran 代码时如何检查标准输出是否已被重定向。因为我在输出中添加了编码以使它们变得丰富多彩,这在重定向发生时不起作用。所以如果是这样,编码应该被禁用。
提前致谢!
我想知道在编写 Fortran 代码时如何检查标准输出是否已被重定向。因为我在输出中添加了编码以使它们变得丰富多彩,这在重定向发生时不起作用。所以如果是这样,编码应该被禁用。
提前致谢!
如果@Janneb 建议的非标准解决方案没有吸引力,我建议将参数传递给 Fortran 程序,告诉它将输出发送到哪里。然后程序可以确定是否允许编写您的编码。如果您选择这条路线,您可以使用 (Fortran 2003) 内在子例程get_command_argument
。
最简单的可行方法(但可能是特定于编译器的)是使用编译器扩展来访问 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()。