Potrzebuję rozwijać bibliotekę, która otwiera plik i parsuje rzeczy. Numer jednostki, ze względu na fortranowy styl IO, musi być rozstrzygnięty przeze mnie, ale nie wiem, jakie inne jednostki są otwarte w kodzie klienta. Czy istnieje standardowa funkcja, taka jak give_me_any_unit_number_that_is_free()
?uzyskiwanie bezpłatnego numeru jednostki w Fortran
9
A
Odpowiedz
26
W Fortran 2008, istnieje klauzula newunit otwarcie, że można użyć
integer :: myunit
..
open(newunit=myunit,file='file.dat')
...
close(myunit)
ale to tyle nowy, że nie wszystkie kompilatory obsługują go jeszcze. Jeśli jeszcze nie możesz, możesz na siebie wyśmiać; jest dobry przykład na fortran wiki.
10
Można użyć ENQUIRE znaleźć numer urządzenia, które nie jest w użytku:
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