不幸的是,I/O重定向的重点在于你的程序不必知道输入/输出文件是什么。在基于unix的系统上,您不能查看命令行参数,因为<main.in> main.out
实际上由shell处理,它使用这些文件在调用程序之前设置标准输入和输出。
您必须记住,标准输入和输出有时甚至不会是文件,因为它们可能是终端或管道。例如
./generate_input | ./program.x | less
所以一个解决方案是重新设计你的程序,以便输出文件是明确的参数。
./program.x --out=main.out
这样你的程序就知道文件名了。成本是你的程序现在负责打开(也许创建)文件。
这就是说,在linux系统上,你可以真正发现你的标准文件句柄从特殊/ proc文件系统指向的地方。将有到位的符号链接每个文件描述符
/proc/<process_id>/fd/0 -> standard_input
/proc/<process_id>/fd/1 -> standard_output
/proc/<process_id>/fd/2 -> standard_error
对不起,我不知道FORTRAN,但检查输出文件的psudeo编码方式可以是:
out_name = realLink("/proc/"+getpid()+"/fd/1")
if(isNormalFile(out_name))
...
记住我之前说过,没有这样做,这实际上是一个正常的文件。它可能是一个终端设备,一个管道,一个网络套接字,无论如何...另外,我不知道除了redhat/centos linux以外还有哪些操作系统可以工作,所以它可能不是那么便携。更多的诊断工具。
+1;我想如果你想要这个级别的控制权,将输入名称传递给程序并让程序打开文件并生成输出文件名是要走的路。 – 2011-04-09 14:39:20