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
