プログラム実行中にディレクトリを新規作成する
簡単な例:outputという名前のディレクトリを作成する
call system( &
& 'if [ ! -d output ]; then &
& (echo "Create output directory"; mkdir -p output); &
& fi')
サブディレクトリまで指定できるバージョン
- makedir.f90 1KB ダウンロード
program makedir
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/teaching/21.Fortran/03.Makedir
!
! Revision history:
! 2011-05-10 11:42
! Initial Version
! use
implicit none
character(len=200) :: outdir
character(len=1000) :: comm ! unix command
integer::is,ie,idxodr
integer lnblnk
! write(*,'(a)')'Program makedir starts.'
! write(*,*)''
!
outdir="output/temp/"
idxodr=lnblnk(outdir)
!
is=1; ie=is+len('if [ ! -d ')
write(comm(is:ie),'(A)') 'if [ ! -d '
is=ie+1; ie=is+idxodr
write(comm(is:ie),'(A)') outdir(1:idxodr)
is=ie+1
ie=is+len(' ]; then (echo "Create directory,')
write(comm(is:ie),'(A)')&
&' ]; then (echo "Create directory,'
is=ie+1; ie=is+idxodr-1
write(comm(is:ie),'(A)') outdir(1:idxodr)
is=ie+1
ie=is+len('"; mkdir -p ')-1
write(comm(is:ie),'(A)')&
& '"; mkdir -p '
is=ie+1; ie=is+idxodr-1
write(comm(is:ie),'(A)') outdir(1:idxodr)
is=ie+1; ie=is+4
write(comm(is:ie),'(A)') '); fi'
! print '(A)',comm(1:ie)
call system(comm(1:ie))
! write(*,'(a)')'Done program makedir.'
! write(*,*)
end program makedir
使用例
コンパイル例
- makefile 3KB ダウンロード
$ make
make: Warning: File `makefile' has modification time 2.5e+02 s in the future
if [ ! -d ../obj ]; then \
mkdir -p ../obj ; \
fi
ifort -c -CB -traceback -fpe0 -module ../obj -c -o ../obj/makedir.o makedir.f90
ifort -o makedir ../obj/makedir.o -module ../obj
実行例
[Tue May 10 11:56:36 JST 2011]
[am@aofd30 processor=x86_64]
[~/teaching/21.Fortran/03.Makedir]
$ ls
makedir* makedir.f90 makefile
[Tue May 10 11:56:44 JST 2011]
[am@aofd30 processor=x86_64]
[~/teaching/21.Fortran/03.Makedir]
$ makedir
Create directory, output/temp/
[Tue May 10 11:56:51 JST 2011]
[am@aofd30 processor=x86_64]
[~/teaching/21.Fortran/03.Makedir]
$ ls
makedir* makedir.f90 makefile output/
[Tue May 10 11:56:46 JST 2011]
[am@aofd30 processor=x86_64]
[~/teaching/21.Fortran/03.Makedir]
$ ls output
temp/
注意
サブルーチンsystemは, ifort, g77, gfortran, g95などでは実装されている。
大型計算機には無いことが多いようだが、同様の動作をする名前の異なるサブルーチンが存在することがある(マニュアルをチェックすること)
参考
Fortran 77用
call system(
&'if [ ! -d output ]; then
& (echo "Create output directory"; mkdir -p output);
& fi')