在 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.