我已经覆盖了保留的UNIT NUMBER 5和6来分别读写文件。所以我现在无法阅读stdin
并撰写stdout
。
我想分别将stdin和stdout连接到新的UNIT NUMBERS 7和8,而不是改变我的所有代码。我怎么能这样做?
修改#1
让我举一个例子来澄清我的情况。
OPEN (UNIT=5, FILE='input.txt', status='OLD')
OPEN (UNIT=6, FILE='output.txt', status='REPLACE')
...some code...
READ (5, *format1*) x, y, z
WRITE (6, *format2*) i, j ,k
原始代码不是由我编写的,大约有4000行。由于我是fortran77的新手,所以我不想修改OPEN
声明,因为我担心这会导致更多问题让我解决。如果可以将stdin
和stdout
重新连接到新的UNIT NUMBER,它将使我远离许多潜在的麻烦。
修改#2
请清楚阅读我的问题。我的问题是如何做到这一点。我并不担心这样做是否有益。如果不可能这样做,那对我来说也是一个有效的答案,可以防止其他人重复同样的问题。谢谢大家。
答案 0 :(得分:1)
您发现5
并且6
根本没有保留,它们只是通常预先连接到stdin
和stdout
的单位在类Unix操作系统上。我不相信有一种语言标准和便携方式将其他单元连接到那些伪文件。我也相信,通过陈述我缺乏信念,我会抽出一个知道如何做你想要的人。我们会看到。
与此同时,如果您使用的是英特尔Fortran编译器,则可以通过设置环境变量FOR_PRINT
和FOR_READ
的值来重定向发送到文件的输出或从文件中提取的输入。有关详细信息,请查看编译器文档。
最后,我不明白你是怎么做到你需要做你认为你需要做的事情。当然,全局搜索和替换好的编辑器将解决问题?对我而言,更令人困惑的是,如果您已在单位5
和6
上打开文件,您肯定可以修改一些open
语句吗?
答案 1 :(得分:1)
如果您正在使用gfortran,您可以尝试设置环境变量GFORTRAN_STDIN_UNIT和GFORTRAN_STDOUT_UNIT以选择要分别预先连接到stdin
和stdout
的单元号。
详细信息可在本文档中找到:
答案 2 :(得分:1)
以下解决方案显示了linux上的重新连接,其中可以找到伪文件/dev/stdin
,/dev/stdout
和/dev/stderr
。由于这些文件在Windows上不可用,因此这是不可移植的解决方案。
如果你想为linux开发,你只需用你喜欢的单位打开这些文件(最好用@VladimirF指出的命名变量)。虽然,我不确定,如果下面的代码与Fortran77兼容(你真的需要Fortran77吗?)。
program test
integer :: stdin, stdout, a
! open the files
open(7, file="/dev/stdout", status="old")
open(8, file="/dev/stdin", status="old")
! read and write an integer from/to the terminal
read(7,*) a
write(8,*) a
end program