#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