在 Fortran 中全局访问打开的文件
Accessing open files globally in Fortran
是否有任何方法可以通过传递单元号来访问(读取、写入)在其他源代码中打开的文件?
是的,这是可能的(对于阅读和写作)。这是一个简短的例子:
module test_mod
contains
subroutine myWrite( uFile )
implicit none
integer, intent(in) :: uFile
write(uFile, *) 'Hello world'
end subroutine
end module
program test
use test_mod
implicit none
integer :: uFile, stat
open(newunit=uFile, file='test.txt', status='replace', &
action='write', iostat=stat)
if(stat.ne.0) return
call myWrite( uFile )
close (uFile)
end program
$ cat test.txt
Hello world
外部文件单元可全局访问。您甚至不需要传递单位编号,尽管这比使用硬编码单位更好。此行为在 Fortran 2008 Cl 中定义。 9.5.1,
3 The external unit identified by a particular value of a scalar-int-expr is the same external unit in all program
units of the program.
他们在注释 9.14 中提供此示例代码的位置:
In the example:
SUBROUTINE A
READ (6) X
...
SUBROUTINE B
N = 6
REWIND N
the value 6 used in both program units identifies the same external unit.
是否有任何方法可以通过传递单元号来访问(读取、写入)在其他源代码中打开的文件?
是的,这是可能的(对于阅读和写作)。这是一个简短的例子:
module test_mod
contains
subroutine myWrite( uFile )
implicit none
integer, intent(in) :: uFile
write(uFile, *) 'Hello world'
end subroutine
end module
program test
use test_mod
implicit none
integer :: uFile, stat
open(newunit=uFile, file='test.txt', status='replace', &
action='write', iostat=stat)
if(stat.ne.0) return
call myWrite( uFile )
close (uFile)
end program
$ cat test.txt
Hello world
外部文件单元可全局访问。您甚至不需要传递单位编号,尽管这比使用硬编码单位更好。此行为在 Fortran 2008 Cl 中定义。 9.5.1,
3 The external unit identified by a particular value of a scalar-int-expr is the same external unit in all program units of the program.
他们在注释 9.14 中提供此示例代码的位置:
In the example:
SUBROUTINE A READ (6) X ... SUBROUTINE B N = 6 REWIND N
the value 6 used in both program units identifies the same external unit.