получить бесплатный номер юнита в фортране - PullRequest
10 голосов
/ 24 октября 2011

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

Ответы [ 2 ]

28 голосов
/ 24 октября 2011

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

   integer :: myunit

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

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

10 голосов
/ 30 ноября 2011

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

      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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...