получение бесплатного номера единицы измерения в fortran

#fortran #fortran95

#фортран #фортран95

Вопрос:

Мне нужно разработать библиотеку, которая открывает файл и анализирует его содержимое. Номер модуля, из-за стиля ввода-вывода fortran, должен определяться мной, но я не могу знать, какие другие модули открыты в клиентском коде. Есть ли такая стандартная функция, как give_me_any_unit_number_that_is_free() ?

Ответ №1:

В fortran 2008 есть предложение newunit для открытия, которое вы можете использовать

    integer :: myunit

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

но это достаточно ново, чтобы не все компиляторы поддерживали его. Если у вас его еще нет, вы можете создать его самостоятельно; в fortran wiki есть хороший пример.

Ответ №2:

Вы можете использовать ЗАПРОС, чтобы найти номер устройства, который не используется:

       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