外部システム情報へのアクセス#
command_argument_count#
名前#
command_argument_count(3) - [SYSTEM:コマンドライン] コマンドライン引数の数を取得
概要#
result = command_argument_count()
integer function command_argument_count()
特性#
結果はデフォルトの整数スカラーです。
説明#
command_argument_count(3) は、プログラムの起動時にコマンドラインで渡された引数の数を返します。
オプション#
なし
結果#
: 戻り値はデフォルトの整数型です。これは、プログラムが起動されたときにコマンドラインで渡された引数の数です。
コマンド引数が利用できない場合、またはプロセッサがコマンド引数をサポートしていない場合、結果はゼロの値になります。
プロセッサにコマンド名の概念がある場合、コマンド名はコマンド引数の 1 つとしてカウントされません。
例#
サンプルプログラム
program demo_command_argument_count
implicit none
integer :: count
count = command_argument_count()
print *, count
end program demo_command_argument_count
サンプル出力
# the command verb does not count
./test_command_argument_count
0
# quoted strings may count as one argument
./test_command_argument_count count arguments
2
./test_command_argument_count 'count arguments'
1
標準#
Fortran 2003
参照#
get_command(3), get_command_argument(3)
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
get_command#
名前#
get_command(3) - [SYSTEM:コマンドライン] コマンドライン全体の呼び出しを取得
概要#
call get_command([command] [,length] [,status] [,errmsg])
subroutine get_command( command ,length ,status, errmsg )
character(len=*),intent(out),optional :: command
integer(kind=**),intent(out),optional :: length
integer(kind=**),intent(out),optional :: status
character(len=*),intent(inout),optional :: errmsg
特性#
** で指定された種類は、ここで説明する条件を満たす型のサポートされている任意の種類である可能性があります。
command と errmsg は、デフォルトの種類のスカラー文字変数です。
length と status は、少なくとも 4 の 10 進指数範囲を持つスカラー整数です。
説明#
get_command(3) は、プログラムの起動に使用されたコマンドライン全体を取得します。
コマンドラインに入力されたものは、多くの場合シェルによって処理されることに注意してください。シェルは通常、プログラムに渡す前に特殊文字と空白を処理します。処理は、globbing をオフにするか、コマンドライン引数を引用符で囲むか、デフォルトのフィールド区切り文字を変更することでオフにできますが、これはめったに必要ありません。
結果#
- command
command が存在する場合、プログラムの起動に使用されたコマンドライン全体がそこに格納されます。コマンドを特定できない場合、command にはすべて空白が割り当てられます。
- length
length が存在する場合、コマンドラインの長さが割り当てられます。末尾の空白がカウントされるかどうかはシステムに依存します。
コマンド長を特定できない場合、長さ 0 が割り当てられます。
- status
status が存在する場合、コマンドの成功時に 0 が割り当てられ、command がコマンドラインを格納するには短すぎる場合は -1 が割り当てられ、エラーの場合は正の値が割り当てられます。
- errmsg
コマンドの取得が失敗した場合、プロセッサ依存の説明メッセージが割り当てられます。それ以外の場合、変更されません。
例#
サンプルプログラム
program demo_get_command
implicit none
integer :: command_line_length
character(len=:),allocatable :: command_line
! get command line length
call get_command(length=command_line_length)
! allocate string big enough to hold command line
allocate(character(len=command_line_length) :: command_line)
! get command line as a string
call get_command(command=command_line)
! trim leading spaces just in case
command_line=adjustl(command_line)
write(*,'("OUTPUT:",a)')command_line
end program demo_get_command
結果
# note that shell expansion removes some of the whitespace
# without quotes
./test_get_command arguments on command line to echo
OUTPUT:./test_get_command arguments on command line to echo
# using the bash shell with single quotes
./test_get_command 'arguments *><`~[]!{}?"\'| '
OUTPUT:./test_get_command arguments *><`~[]!{}?"'|
標準#
Fortran 2003
参照#
get_command_argument(3), command_argument_count(3)
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
#
get_command_argument#
名前#
get_command_argument(3) - [SYSTEM:コマンドライン] コマンドライン引数を取得
概要#
call get_command_argument(number [,value] [,length] &
& [,status] [,errmsg])
subroutine get_command_argument( number, value, length, &
& status ,errmsg)
integer(kind=**),intent(in) :: number
character(len=*),intent(out),optional :: value
integer(kind=**),intent(out),optional :: length
integer(kind=**),intent(out),optional :: status
character(len=*),intent(inout),optional :: errmsg
特性#
** で指定された種類は、ここで説明する条件を満たす型のサポートされている任意の種類である可能性があります。
number、length、および status は、少なくとも 4 の 10 進指数範囲を持つスカラー整数です。
value と errmsg は、デフォルトの種類のスカラー文字変数です。
説明#
get_command_argument(3) は、現在のプログラム実行にコマンドラインで渡された n 番目の引数を取得またはクエリします。
引数が何であるかについて具体的に述べられていることはありませんが、実際には、引数が引用符で囲まれていない限り、引数は空白で分割された文字列です。一般的なシェルで使用される IFS 値(内部フィールド区切り文字)は通常無視され、引用符で囲まれていない空白はほとんど常に区切り文字です。
シェルは、プログラムに渡す前にコマンド引数を展開したり、文字をスペルしたりすることが多いため、読み取られた文字列は、ユーザーがコマンドラインで入力した内容と完全に一致するとは限りません。
オプション#
- number
現在のプログラムのコマンドラインのどの引数を取得またはクエリするかを示す非負の数です。
number = 0 の場合、指定された引数はプログラムの名前(この機能をサポートするシステムの場合)に設定されます。
プロセッサにコマンド名のような概念がない場合、コマンド引数 0 の値はプロセッサに依存します。
プログラムに渡された引数の数である 1 からの値の場合、プロセッサによって決定された順序で値が返されます。慣例として、コマンドラインに表示される順序で左から右に連続して返されます。
結果#
- value
value 引数は、コマンドライン引数を保持します。value が引数を保持できない場合、value の長さに合わせて切り捨てられます。
コマンドラインで指定された引数が number より少ない場合、またはその他の理由で指定された引数が存在しない場合、value は空白で埋められます。
- length
length 引数には、n 番目のコマンドライン引数の長さが含まれます。value の長さはこの値に影響を与えません。これは、value によって提供されるストレージの量に関係なく、引数のすべての重要な文字を保持するために必要な長さです。
- status
引数の取得に失敗した場合、status は正の数になります。value に切り捨てられたコマンドライン引数が含まれている場合、status は -1 になり、それ以外の場合は status はゼロになります。
例#
サンプルプログラム
program demo_get_command_argument
implicit none
character(len=255) :: progname
integer :: count, i, argument_length, istat
character(len=:),allocatable :: arg
! command name assuming it is less than 255 characters in length
call get_command_argument (0, progname, status=istat)
if (istat == 0) then
print *, "The program's name is " // trim (progname)
else
print *, "Could not get the program's name " // trim (progname)
endif
! get number of arguments
count = command_argument_count()
write(*,*)'The number of arguments is ',count
!
! allocate string array big enough to hold command line
! argument strings and related information
!
do i=1,count
call get_command_argument(number=i,length=argument_length)
if(allocated(arg))deallocate(arg)
allocate(character(len=argument_length) :: arg)
call get_command_argument(i, arg,status=istat)
! show the results
write (*,'(i3.3,1x,i0.5,1x,i0.5,1x,"[",a,"]")') &
& i,istat,argument_length,arg
enddo
end program demo_get_command_argument
結果
./demo_get_command_argument a test 'of getting arguments ' " leading"
The program's name is ./demo_get_command_argument
The number of arguments is 4
001 00000 00001 [a]
002 00000 00004 [test]
003 00000 00022 [of getting arguments ]
004 00000 00008 [ leading]
標準#
Fortran 2003
参照#
get_command(3), command_argument_count(3)
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
#
cpu_time#
名前#
cpu_time(3) - [SYSTEM:TIME] CPU プロセッサの使用時間を秒単位で返します
概要#
call cpu_time(time)
subroutine cpu_time(time)
real,intent(out) :: time
特性#
time は任意の種類の実数です
説明#
cpu_time(3) は、経過した CPU 時間を秒単位で表す実数値を返します。これは、コードの特定の部分の実行時間を測定するのに役立ちます。
利用可能な時間ソースがない場合、time は負の値に設定されます。
時間に関する正確な定義は、プロセッサによって提供できるものが異なるため、あいまいなままにされています。
time には、システムに依存する任意オフセットが含まれる可能性があり、0.0 から始まるとは限らないことに注意してください。 cpu_time(3) の絶対値は意味がありません。以下の例に示すように、連続する呼び出し間の差のみを使用する必要があります。
並列処理
割り当てられる値が、呼び出し側のイメージが使用した時間のおおよその値であるか、プログラム全体で使用された時間であるかは、プロセッサに依存します。
単一の結果では不十分なプロセッサ(たとえば、並列プロセッサ)では、time が配列となる追加のバージョンを提供することを選択する場合があります。
結果#
- time
プロセッサ時間(秒単位)のプロセッサ依存の概算値が割り当てられます。プロセッサが意味のある時間を返すことができない場合は、プロセッサ依存の負の値が返されます。
開始時間は、例のようにコードのセクションを測定することを目的とするため、あいまいなままにされています。これには、システムのオーバーヘッド時間が含まれる場合と含まれない場合があります。
例#
サンプルプログラム
program demo_cpu_time
use, intrinsic :: iso_fortran_env, only : real_kinds,real32,real64,real128
implicit none
real :: start, finish
real(kind=real64) :: startd, finishd
!
call cpu_time(start)
call cpu_time(startd)
! put code to time here
call cpu_time(finish)
call cpu_time(finishd)
!
! writes processor time taken by the piece of code.
! the accuracy of the clock and whether it includes system time
! as well as user time is processor dependent. Accuracy up to
! milliseconds is common but not guaranteed, and may be much
! higher or lower
print '("Processor Time = ",f6.3," seconds.")',finish-start
! see your specific compiler documentation for how to measure
! parallel jobs and for the precision of the time returned
print '("Processor Time = ",g0," seconds.")',finish-start
print '("Processor Time = ",g0," seconds.")',finishd-startd
end program demo_cpu_time
結果
結果の精度、返されるものの側面、および並列アプリケーションに使用できるオプションの有無は、システムによって異なる場合があります。詳細については、コンパイラ固有のドキュメントを参照してください。
Processor Time = 0.000 seconds.
Processor Time = .4000030E-05 seconds.
Processor Time = .2000000000000265E-05 seconds.
標準#
Fortran 95
関連事項#
system_clock(3), date_and_time(3)
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
date_and_time#
名前#
date_and_time(3) - [SYSTEM:TIME] 現在の日時を取得します
概要#
call date_and_time( [date] [,time] [,zone] [,values] )
subroutine date_and_time(date, time, zone, values)
character(len=8),intent(out),optional :: date
character(len=10),intent(out),optional :: time
character(len=5),intent(out),optional :: zone
integer,intent(out),optional :: values(8)
特性#
*date はデフォルトの文字スカラーです
*time はデフォルトの文字スカラーです
*zone はデフォルトの文字スカラーです
values は、少なくとも 4 の 10 進指数範囲を持つ整数型のランク 1 の配列です。
説明#
date_and_time(3) は、リアルタイム システム クロックから対応する日付と時刻の情報を取得します。
利用できない時間と日付の文字パラメータは、空白を返します。
利用できない数値パラメータは、-huge(value) を返します。
これらの形式は、ISO 8601:2004 で定義されている表現と互換性があります。UTC は、国際度量衡局(BIPM、すなわち Bureau International des Poids et Mesures)および国際地球回転サービス(IERS)によって確立されています。
オプション#
- date
CCYYMMDD の形式で、長さが 8 以上のデフォルトの種類の文字列。ここで
CCYY はグレゴリオ暦の年
MM は年内の月
DD は月内の日。
この値の文字はすべて 10 進数です。
利用可能な日付がない場合、DATE にはすべて空白が割り当てられます。
- time
HHMMSS.SSS の形式で、長さが 10 以上のデフォルトの種類の文字列。ここで
hh は 1 日の時間、
mm は時間の分、
ss.sss は分の秒とミリ秒。
小数点を除いて、この値の文字はすべて 10 進数である必要があります。
利用可能なクロックがない場合、TIME にはすべて空白が割り当てられます。
- zone
協定世界時(UTC)との差を表す、(+-)HHMM の形式で、長さが 5 以上の文字列。ここで
hh と mm は、協定世界時(UTC)との時間差をそれぞれ時間と分で表します。
この値の符号文字に続く文字はすべて 10 進数です。
この情報が利用できない場合、ZONE にはすべて空白が割り当てられます。
- values
少なくとも 8 つの要素を持つ配列。値に使用できるデータがない場合は、-huge(values) に設定されます。それ以外の場合は、以下が含まれます。
values(1) : 世紀を含む年。
values(2) : 年の月
values(3) : 月の日
values(4) : 報告された時間と UTC 時間の間の時間差(分単位)。
values(5) : 1 日の時間、範囲は 0~23。
values(6) : 1 時間の分、範囲は 0~59
values(7) : 1 分の秒、範囲は 0~60
values(8) : 1 秒のミリ秒、範囲は 0~999。
日付、クロック、およびタイムゾーンの情報は、一部のイメージでは利用可能で、他のイメージでは利用できない場合があります。日付、クロック、またはタイムゾーンの情報が複数のイメージで利用可能な場合、これらのイメージが同じ情報を共有するかどうかはプロセッサに依存します。
例#
サンプルプログラム
program demo_date_and_time
implicit none
character(len=8) :: date
character(len=10) :: time
character(len=5) :: zone
integer,dimension(8) :: values
call date_and_time(date,time,zone,values)
! using keyword arguments
call date_and_time(DATE=date,TIME=time,ZONE=zone)
print '(*(g0))','DATE="',date,'" TIME="',time,'" ZONE="',zone,'"'
call date_and_time(VALUES=values)
write(*,'(i5,a)') &
& values(1),' - The year', &
& values(2),' - The month', &
& values(3),' - The day of the month', &
& values(4),' - Time difference with UTC in minutes', &
& values(5),' - The hour of the day', &
& values(6),' - The minutes of the hour', &
& values(7),' - The seconds of the minute', &
& values(8),' - The milliseconds of the second'
end program demo_date_and_time
結果
> DATE="20201222" TIME="165738.779" ZONE="-0500"
> 2020 - The year
> 12 - The month
> 22 - The day of the month
> -300 - Time difference with UTC in minutes
> 16 - The hour of the day
> 57 - The minutes of the hour
> 38 - The seconds of the minute
> 779 - The milliseconds of the second
標準#
Fortran 95
関連事項#
リソース#
日付と時刻の変換、書式設定、計算
M_time - https://github.com/urbanjost/M_time
fortran-datetime https://github.com/dongli/fortran-datetime
datetime-fortran - https://github.com/wavebitscientific/datetime-fortran
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
system_clock#
名前#
system_clock(3) - [SYSTEM:TIME] システム クロックを照会します
概要#
call system_clock([count] [,count_rate] [,count_max] )
subroutine system_clock(count, count_rate, count_max)
integer(kind=**),intent(out),optional :: count
type(TYPE(kind=**),intent(out),optional :: count_rate
integer(kind=**),intent(out),optional :: count_max
特性#
count は整数スカラーです
count_rate は整数または実数スカラーです
count_max は整数スカラーです
説明#
system_clock(3) を使用すると、プロセッサ クロックの現在値に基づいてプロセッサに依存する値を返すことにより、システムで一般的に利用可能な最小の時間増分精度で時間の経過を測定できます。
system_clock は通常、短い時間間隔を測定するために使用されます(システム クロックは 24 時間クロックであるか、たとえば起動時からのプロセッサ クロック チックを測定できます)。プロファイリング ツールを使用する代わりに、コード ブロックで費やされた時間を測定または追跡するために最もよく使用されます。
count_rate と count_max は一定であると想定されます(単一のプラットフォームでも CPU レートは変動する可能性があります)。
イメージにクロックがないか、独自の単一のクロックがあるか、別のイメージとクロックを共有するかは、プロセッサに依存します。
クロックがないか、クロックのクエリが失敗した場合、count は -huge(count) に設定され、count_rate と count_max はゼロに設定されます。
測定の精度は、引数の種類によって異なる場合があります。
タイミング関連の手順は、明らかにプロセッサとシステムに依存します。より具体的な情報は、一般的にコンパイラ固有のドキュメントに記載されています。
オプション#
count クロックがない場合、count に返される値は負の値 -huge(count) です。
それ以外の場合、clock 値は、値 count_max に達するまで各クロック カウントごとに 1 ずつ増分され、次のカウントでゼロにリセットされます。したがって、clock は 0 から count_max の範囲にあるモジュロ値です。
- count_rate
プロセッサ クロック カウント数/秒のおおよそのプロセッサ依存値、またはクロックがない場合はゼロが割り当てられます。count_rate はシステムに依存し、引数の種類によって異なる場合があります。一般に、大きな実数の方がより正確な間隔を生成する場合があります。
- count_max
COUNT が持つことができる最大値、またはクロックがない場合はゼロが割り当てられます。
例#
プロセッサ クロックが、1 秒あたり約 18.20648193 チックの頻度で時間を登録する 24 時間クロックである場合、午前 11 時 30 分に、次の参照
call system_clock (count = c, count_rate = r, count_max = m)
が定義します
C = (11*3600+30*60)*18.20648193 = 753748,
R = 18.20648193, and
M = 24*3600*18.20648193-1 = 1573039.
サンプルプログラム
program demo_system_clock
use, intrinsic :: iso_fortran_env, only: wp => real64, int32, int64
implicit none
character(len=*), parameter :: g = '(1x,*(g0,1x))'
integer(kind=int64) :: count64, count_rate64, count_max64
integer(kind=int64) :: start64, finish64
integer(kind=int32) :: count32, count_rate32, count_max32
integer(kind=int32) :: start32, finish32
real(kind=wp) :: time_read
real(kind=wp) :: sum
integer :: i
print g, 'accuracy may vary with argument type!'
print g, 'query all arguments'
call system_clock(count64, count_rate64, count_max64)
print g, 'COUNT_MAX(64bit)=', count_max64
print g, 'COUNT_RATE(64bit)=', count_rate64
print g, 'CURRENT COUNT(64bit)=', count64
call system_clock(count32, count_rate32, count_max32)
print g, 'COUNT_MAX(32bit)=', count_max32
print g, 'COUNT_RATE(32bit)=', count_rate32
print g, 'CURRENT COUNT(32bit)=', count32
print g, 'time some computation'
call system_clock(start64)
! some code to time
sum = 0.0_wp
do i = -0, huge(0) - 1
sum = sum + sqrt(real(i))
end do
print g, 'SUM=', sum
call system_clock(finish64)
time_read = (finish64 - start64)/real(count_rate64, wp)
write (*, '(1x,a,1x,g0,1x,a)') 'time : ', time_read, ' seconds'
end program demo_system_clock
結果
> accuracy may vary with argument type!
> query all arguments
> COUNT_MAX(64bit)= 9223372036854775807
> COUNT_RATE(64bit)= 1000000000
> CURRENT COUNT(64bit)= 1105422387865806
> COUNT_MAX(32bit)= 2147483647
> COUNT_RATE(32bit)= 1000
> CURRENT COUNT(32bit)= 1105422387
> time some computation
> SUM= 66344288183024.266
> time : 6.1341038460000004 seconds
標準#
Fortran 95
関連事項#
fortran-lang 組み込み関数の説明
execute_command_line#
名前#
execute_command_line(3) - [SYSTEM:PROCESSES] シェル コマンドを実行します
概要#
call execute_command_line( &
& command [,wait] [,exitstat] [,cmdstat] [,cmdmsg] )
subroutine execute_command_line(command,wait,exitstat,cmdstat,cmdmsg)
character(len=*),intent(in) :: command
logical,intent(in),optional :: wait
integer,intent(inout),optional :: exitstat
integer,intent(inout),optional :: cmdstat
character(len=*),intent(inout),optional :: cmdmsg
特性#
command はデフォルトの文字スカラーです
wait はデフォルトの論理スカラーです。 wait が次の状態で存在する場合
exitstat はデフォルトの種類の整数です。少なくとも 9 の 10 進指数範囲を持つ種類である必要があります。
cmdstat はデフォルトの種類の整数です。変数の種類は、少なくとも 4 の 10 進指数範囲をサポートする必要があります。
cmdmsg はデフォルトの種類の文字スカラーです。
説明#
execute_command_line(3)では、command引数がシェルに渡されて実行されます。(シェルは通常、Unixシステムではsh(1)、Windowsではcmd.exeです。)waitが存在し、値が.false.の場合、システムがサポートしていればコマンドの実行は非同期になります。そうでない場合は、コマンドは同期的に実行されます。
最後の3つの引数を使用すると、ユーザーはステータス情報を取得できます。同期実行後、exitstatには、systemによって返されるコマンドの整数終了コードが含まれます。cmdstatは、コマンドラインが実行された場合(終了ステータスに関係なく)ゼロに設定されます。エラーが発生した場合、cmdmsgにはエラーメッセージが割り当てられます。
システムコールはスレッドセーフである必要がないことに注意してください。必要に応じて、システムが同時に呼び出されないようにするのはユーザーの責任です。
コマンドが同期的に実行される場合、execute_command_lineはコマンドラインの実行が完了した後に戻ります。それ以外の場合、execute_command_lineは待たずに戻ります。
この組込み関数はシステムコールを行っているため、システムに大きく依存します。シグナルに関する動作はプロセッサに依存します。特に、POSIX準拠システムでは、SIGINTおよびSIGQUITシグナルは無視され、SIGCHLDはブロックされます。そのため、親プロセスが終了した場合、子プロセスも一緒に終了しない可能性があります。
オプション#
- command
実行されるコマンドライン。解釈はプログラミング環境に依存します。
- wait
waitが値.false.とともに存在し、プロセッサがコマンドの非同期実行をサポートしている場合、コマンドは非同期に実行されます。それ以外の場合は、同期的に実行されます。
コマンドが同期的に実行される場合、execute_command_line(3)はコマンドラインの実行が完了した後に戻ります。それ以外の場合、execute_command_line(3)は待たずに戻ります。
- exitstat
コマンドが同期的に実行される場合、プロセッサ依存の終了ステータスの値が割り当てられます。それ以外の場合、exitstatの値は変更されません。
- cmdstat
エラー状態が発生し、cmdstatが存在しない場合、イメージの実行がエラー終了します。
プロセッサがコマンドライン実行をサポートしていない場合は-1、エラー状態が発生した場合はプロセッサ依存の正の値、エラー状態は発生しなかったが、waitがfalseの値で存在し、プロセッサが非同期実行をサポートしていない場合は-2が割り当てられます。それ以外の場合は、値0が割り当てられます。
- cmdmsg
エラー状態が発生した場合、プロセッサ依存の説明メッセージが割り当てられます。それ以外の場合、変更されません。
例#
サンプルプログラム
program demo_exec
implicit none
integer :: i
call execute_command_line("external_prog.exe", exitstat=i)
print *, "Exit status of external_prog.exe was ", i
call execute_command_line("reindex_files.exe", wait=.false.)
print *, "Now reindexing files in the background"
end program demo_exec
標準#
Fortran 2008
参照#
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost
get_environment_variable#
名前#
get_environment_variable(3) - [SYSTEM:ENVIRONMENT] 環境変数の値を取得します
概要#
call get_environment_variable(name [,value] [,length] &
& [,status] [,trim_name] [,errmsg] )
subroutine character(len=*) get_environment_variable( &
& name, value, length, status, trim_name, errmsg )
character(len=*),intent(in) :: name
character(len=*),intent(out),optional :: value
integer(kind=**),intent(out),optional :: length
integer(kind=**),intent(out),optional :: status
logical,intent(out),optional :: trim_name
character(len=*),intent(inout),optional :: errmsg
特性#
** で指定された種類は、ここで説明する条件を満たす型のサポートされている任意の種類である可能性があります。
name、value、およびerrmsgは、デフォルト種類のスカラ文字です。
lengthとstatusは、少なくとも4の10進指数範囲を持つ整数スカラです。
trim_nameは、デフォルト種類の論理型のスカラです。
説明#
get_environment_variable(3)は、環境変数nameのvalueを取得します。
get_environment_variable(3)はスレッドセーフである必要がないことに注意してください。環境が同時に更新されないようにするのはユーザーの責任です。
並列で実行する場合は注意してください。イメージに存在する環境変数が別のイメージにも存在するかどうか、また両方のイメージに存在する場合、値が同じか異なるかはプロセッサに依存します。
オプション#
- name
問い合わせる環境変数の名前。大文字と小文字の解釈はプロセッサに依存します。
結果#
- value
問い合わせられる環境変数の値。valueがデータを保持するのに十分な大きさでない場合、切り捨てられます。変数nameが設定されていないか値がない場合、またはプロセッサが環境変数をサポートしていない場合、valueは空白で埋められます。
- length
引数lengthには、環境変数nameを格納するために必要な長さが含まれます。環境変数が設定されていない場合はゼロです。
- status
statusは、valueが存在するが環境変数に対して短すぎる場合は-1です。環境変数が存在しない場合は1、プロセッサが環境変数をサポートしていない場合は2です。その他のすべての場合、statusはゼロです。
- trim_name
trim_nameが値.false.とともに存在する場合、nameの末尾の空白は意味があります。それ以外の場合、それらは環境変数名の一部ではありません。
例#
サンプルプログラム
program demo_getenv
implicit none
character(len=:),allocatable :: homedir
character(len=:),allocatable :: var
var='HOME'
homedir=get_env(var)
write (*,'(a,"=""",a,"""")')var,homedir
contains
function get_env(name,default) result(value)
! a function that makes calling get_environment_variable(3) simple
implicit none
character(len=*),intent(in) :: name
character(len=*),intent(in),optional :: default
character(len=:),allocatable :: value
integer :: howbig
integer :: stat
integer :: length
length=0
value=''
if(name.ne.'')then
call get_environment_variable( name, &
& length=howbig,status=stat,trim_name=.true.)
select case (stat)
case (1)
print *, name, " is not defined in the environment. Strange..."
value=''
case (2)
print *, &
"This processor does not support environment variables. Boooh!"
value=''
case default
! make string of sufficient size to hold value
if(allocated(value))deallocate(value)
allocate(character(len=max(howbig,1)) :: value)
! get value
call get_environment_variable( &
& name,value,status=stat,trim_name=.true.)
if(stat.ne.0)value=''
end select
endif
if(value.eq.''.and.present(default))value=default
end function get_env
end program demo_getenv
典型的な結果
HOME="/home/urbanjs"
標準#
Fortran 2003
参照#
get_command_argument(3)、get_command(3)
fortran-lang 組み込み関数の説明 (ライセンス: MIT) @urbanjost