在Fortran中获取免费的单元编号

13

我需要开发一个打开文件并解析内容的库。由于Fortran IO样式的原因,单元号必须由我决定,但我不知道客户端代码中是否有其他单元已经被使用。是否有类似 give_me_any_unit_number_that_is_free() 的标准函数可用?

2个回答

33

在Fortran 2008中,有一个新的"newunit"子句可以用来打开文件。

   integer :: myunit

   ..
   open(newunit=myunit,file='file.dat')
   ...
   close(myunit)

但这是比较新的功能,所以并非所有编译器都支持。如果你的编译器还没有支持这个功能,你可以模拟一个; 在Fortran维基上有一个很好的例子。


11

您可以使用INQUIRE查找未使用的单元号:

      integer*4 function get_file_unit (lu_max)
!
!   get_file_unit returns a unit number that is not in use
      integer*4 lu_max,  lu, m, iostat
      logical   opened
!
      m = lu_max  ;  if (m < 1) m = 97
      do lu = m,1,-1
         inquire (unit=lu, opened=opened, iostat=iostat)
         if (iostat.ne.0) cycle
         if (.not.opened) exit
      end do
!
      get_file_unit = lu
      return
      end function get_file_unit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接