2011-10-24 11 views
9

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

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 
Powiązane problemy