nAG Fortran コンパイラ(Fortran Builder)では、POSIX 準拠のインターフェースを独自の組込みモジュールで提供しています。必要に応じて、該当のモジュールを use してご利用ください。
※ POSIX は Fortran 標準ではないため、独自の拡張機能として提供しています。
ここでは、よく使われる POSIX 機能に関してプログラム例を紹介します。
- ファイルの操作 : rename, unlink
- ディレクトリの操作 : chdir, getcwd, mkdir, rmdir
- ディレクトリの読み込み : closedir, opendir, readdir
- プロセス : sleep
その他、利用可能な POSIX 機能の詳細は「nAG Fortran Compiler, Release 7.2 マニュアル - 7 Posix 準拠の Modern Fortran API」をご参照ください。
ファイルの操作 : rename, unlink
rename, unlink は、モジュール f90_unix_dir のサブルーチンとして提供されます。
詳細は「nAG Fortran Compiler, Release 7.2 マニュアル - 7.2 f90_unix_dir」をご参照ください。
program main use f90_unix_dir implicit none character(16) hello write (*, '(a)', advance = 'no') 'Press enter to create old_name.txt: ' read * open (10, file = 'old_name.txt', status = 'new') write (10, '(a)') 'Hello World' close (10) print * print *, 'old_name.txt created.' print * write (*, '(a)', advance = 'no') 'Press enter to rename it to new_name.txt: ' read * call rename('old_name.txt', 'new_name.txt') open (10, file = 'new_name.txt', status = 'old') print * print *, 'Contents of new_name.txt:' do read (10, '(a)', end = 100) hello print *, hello end do 100 continue close (10) write (*, '(/, a)', advance = 'no') 'Press enter to delete new_name.txt: ' read * call unlink('new_name.txt') end program
ディレクトリの操作 : chdir, getcwd, mkdir, rmdir
chdir, getcwd, mkdir, rmdir は、モジュール f90_unix_dir のサブルーチンとして提供されます。
詳細は「nAG Fortran Compiler, Release 7.2 マニュアル - 7.2 f90_unix_dir」をご参照ください。
program main use f90_unix_dir use f90_unix_file use f90_unix_errno implicit none character(256) path, answer integer mode, ierrno call getcwd(path) print *, 'Current folder: ', trim(path) write (*, '(a)', advance = 'no') 'Press enter to create "test" folder: ' read * mode = s_irwxu + s_irgrp + s_ixgrp + s_iroth + s_ixoth call mkdir('test', mode, ierrno) if (ierrno == eexist) then print *, '"test" folder already exists, continuing.' else if (ierrno /= 0) then print *, 'Error creating "test" folder:', ierrno stop 'FAILED' end if call chdir('test') call getcwd(path) print *, 'Current folder: ', trim(path) write (*, '(a)', advance = 'no') 'Remove "test" folder? y or n: ' read (*, '(a)') answer if (answer == 'y' .or. answer == 'Y') then call chdir('..') call rmdir('test') print *, '"test" folder removed.' else print *, '"test" folder not removed.' end if end program
ディレクトリの読み込み : closedir, opendir, readdir
closedir, opendir, readdir は、モジュール f90_unix_dirent のサブルーチンとして提供されます。
詳細は「nAG Fortran Compiler, Release 7.2 マニュアル - 7.3 f90_unix_dirent」をご参照ください。
program main use f90_unix_dirent implicit none integer dirunit, lenname character(256) name call opendir('.', dirunit) do call readdir(dirunit, name, lenname) if (lenname < 0) exit print *, trim(name) end do call closedir(dirunit) end program
プロセス : sleep
sleep は、モジュール f90_unix_proc のサブルーチンとして提供されます。
詳細は「nAG Fortran Compiler, Release 7.2 マニュアル - 7.8 f90_unix_proc」をご参照ください。
[ process.f90 ]
program main use f90_unix_proc implicit none integer, parameter :: time = 5 print *, 'Sleeping for 5 sec ...' call sleep(time) print *, 'End' end program