7.4 f90_unix_env
このモジュールは ISO/IEC 9945-1:1990 Portable Operating System Interface (POSIX) - Part 1: System Application Program Interface (API) [C Language] で詳細に規定される機能に対するFortran APIの一部を提供するものです。
このモジュール中の関数はセクション4 プロセス環境、及び4.3BSDからの
gethostname
に由来するものです。
エラー処理についてはF90_UNIX_ERRNO
に記述されています。
省略可能なERRNO
引数を用いた手続きに対し、エラーが生じERRNO
が存在しなかった場合には、プログラムは終了させられる点に注意してください。
このモジュール中のすべての手続きは総称的なものです。いくつかは個別的でもありま す(これは将来リリースで変わる可能性があります)。
7.4.1 パラメータ
INTEGER(int32),PARAMETER :: clock_tick_kindクロック刻み(
TIMES
参照)に用いられる整数種別。
INTEGER(int32),PARAMETER :: id_kindID(すなわちユーザ(uids)、グループ(gids)、プロセスグループ(pgids)、 プロセス(pids))を表す整数種別。
INTEGER(int32),PARAMETER :: long_kindCの型‘long’に対応する整数種別。 これは実際にはこのモジュール中で使用されませんが、
SYSCONF
からの値
を受け取るための変数を宣言する際に有用です。
INTEGER(int32),PARAMETER :: sc_stdin_unit, sc_stdout_unit, sc_stderr_unit, sc_arg_max, sc_child_max, sc_clk_tck, sc_job_control, sc_open_max, sc_ngroups_max, sc_saved_ids, sc_stream_max, sc_tzname_max, sc_version
SYSCONF
への引数として用いられる値。
次の表はSYSCONF
から返される情報を記載したものです。
これはSC_*
定数の値ではありません。
SC_STDIN_UNIT
- 標準入力(
READ *,
...)に対する論理装置番号。これは標準組込みモジュールISO_FORTRAN_ENV
中のINPUT_UNIT
と同じ値です。 SC_STDOUT_UNIT
- 標準出力(
PRINT
,WRITE(*,
...)
)に対する論理装置番号。こ れは標準組込みモジュールISO_FORTRAN_ENV
中のOUTPUT_UNIT
と同じ値 です。 SC_STDERR_UNIT
- エラーが報告される対象の論理装置番号。これは標準組込みモジュール
ISO_FORTRAN_ENV
中のERROR_UNIT
と同じ値です。 SC_ARG_MAX
EXEC
関数に対する引数(環境データを含む)の最大長(単位はバイト)。SC_CHILD_MAX
- 単一ユーザ当りの同時実行プロセス最大数。
SC_CLK_TCK
- 1秒当りのクロック刻み数(これは
CLK_TCK
関数で返される値と同一です)。 SC_JOB_CONTROL
- OSによってジョブ制御がサポートされる場合にのみ利用できる値。
SC_NGROUPS_MAX
- プロセス当りの同時補助グループID最大数。
SC_OPEN_MAX
- 単一プロセスによって同時にオープン可能な最大ファイル数。
SC_SAVED_IDS
- 個々のプロセスがセーブされたset-uidとset-gidを持つ場合にのみ利用できる値。
SC_STREAM_MAX
- 同時にオープン可能な論理装置の最大数。 常に利用できるとは限りません。
SC_TZNAME_MAX
- タイムゾーンの名称に対する最大文字数。
SC_VERSION
- Posixバージョン番号。 基盤となるOSのCインタフェースがISO/IEC 9945-1:1990準拠の場合には、これは 199009となります。
INTEGER(int32),PARAMETER :: time_kind日付/時刻の値(
TIME
参照)を収容する際に用いられる整数種別。
7.4.2 型
TYPE tms INTEGER(clock_tick_kind) utime, stime, cutime, cstime END TYPECPU使用時間(単位はクロック刻み)を保持するための構造型。
UTIME
と
STIME
はプロセスに対するCPUタイム情報を、CUTIME
と
CSTIME
は終了した子プロセスに対するCPUタイム情報を含んでいます。
それぞれはさらにユーザタイム(UTIME
, CUTIME
)とシステムタ
イム(STIME
, CSTIME
)に区分されます。
TYPE utsname CHARACTER(...) sysname, nodename, release, version, machine END TYPE
UNAME
によって返されるデータを保持するための構造型。
個々の成分の文字長は固定ですが、それぞれのシステムによって異なる可能性が
あるので注意してください。
これら成分中のデータは空白によって埋められたり(短かった場合)、切り取ら
れたり(長かった場合)します。
さらなる情報についてはISO/IEC 9945-1:1990を参照ください。
7.4.3 手続き
PURE INTEGER(KIND=clock_tick_kind) FUNCTION clk_tck()CPUタイム1秒当りのクロック刻み数(
TIMES
参照)を応答として返します。
PURE SUBROUTINE ctermid(s,lens) CHARACTER(*),OPTIONAL,INTENT(OUT) :: s INTEGER(int32),OPTIONAL,INTENT(OUT) :: lens指定された場合には、
S
には制御端末のファイル名称がセットされます。
指定された場合には、LENS
には制御端末のファイル名称の長さがセットされます。
S
が制御端末のファイル名称よりも長かった場合には空白が追加されます。
S
の方が短かった場合にはそれは切り取られます — そのような切取りが行われ
たかどうかを検知するためにLENS
の値をチェックすることはユーザの責任です。
制御端末のファイル名称が何らかの理由により決定できない場合には、LENS
は0に、
S
には空白がセットされます(共に存在する場合)。
SUBROUTINE getarg(k,arg,lenarg,errno) INTEGER(*),INTENT(IN) :: k CHARACTER(*),OPTIONAL,INTENT(OUT) :: arg INTEGER(int32),OPTIONAL,INTENT(OUT) :: lenarg INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errnoコマンド行の引数番号
K
をアクセスします。ここに引数0はプログラム名です。
ARG
が存在する場合、それは引数の文字列を受け取ります(引数の長さが
ARG
の長さと異なった場合には、空白の追加、あるいは切取りが適宜行われま
す)。
LENARG
が存在する場合、それは引数の長さを受け取ります。
ERRNO
が存在する場合、それはエラーステータスを受け取ります。
K
が0より小さかったり、引数の数(IARGC
からの応答)より大きかっ
た場合には、エラーEINVAL
(F90_UNIX_ERRNO
参照)が発生する点
に注意してください。
この手続きは標準組込み手続きGET_COMMAND_ARGUMENT
に非常に近いものです。
PURE INTEGER(id_kind) FUNCTION getegid()呼出し元プロセスの実効グループ番号を応答として返します。
SUBROUTINE getenv(name,value,lenvalue,errno) CHARACTER(*),INTENT(IN) :: name CHARACTER(*),OPTIONAL,INTENT(OUT) :: value INTEGER(int32),OPTIONAL,INTENT(OUT) :: lenvalue INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno
NAME
で指定された環境変数にアクセスします。
VALUE
が存在する場合、それはその変数のテキスト値を受け取ります(値の長
さがVALUE
の長さと異なった場合には、空白の追加、あるいは切取りが適宜行
われます)。
LENVALUE
が存在する場合、それは値の長さを受け取ります。
ERRNO
が存在する場合、それはエラーステータスを受け取ります。
指定されたような環境変数が存在しなかった場合には、エラーEINVAL
(F90_UNIX_ERRNO
参照)が発生します。
他の可能性のあるエラーにはENOMEM
があります。
PURE INTEGER(id_kind) FUNCTION geteuid()呼出し元プロセスの実効ユーザ番号を応答として返します。
PURE INTEGER(id_kind) FUNCTION getgid()呼出し元プロセスのグループ番号を応答として返します。
SUBROUTINE getgroups(grouplist,ngroups,errno) INTEGER(id_kind),OPTIONAL,INTENT(OUT) :: grouplist(:) INTEGER(int32),OPTIONAL,INTENT(OUT) :: ngroups INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno呼出し元プロセスに対する補助グループ番号を求めます。
GROUPLIST
が存在する場合、それには補助グループ番号がセットされます。
NGROUPS
が存在する場合、それは補助グループ番号の数を受け取ります。
ERRNO
が存在する場合、それはエラーステータスを受け取ります。
GROUPLIST
が存在するものの、補助グループ番号のリスト全体を収納できる
大きさを持たなかった場合、エラーEINVAL
(F90_UNIX_ERRNO
参照)
が発生します。
補助グループ番号の最大数についてはSYSCONF
(問合せコード
SC_NGROUPS_MAX
)を使って知ることができます。
あるいは‘CALL GETGROUPS(NGROUPS=N)
’によって実際に使われている
数を求めることもできます。
PURE SUBROUTINE gethostname(name,lenname) CHARACTER(*),OPTIONAL,INTENT(OUT) :: name INTEGER(int32),OPTIONAL,INTENT(OUT) :: lennameこれは4.3BSDのgethostname の機能を提供します。
NAME
が存在する場合、現行プロセッサに対する標準ホスト名を文字列で受け取る
ことができます(空白の追加、あるいは切取りが適宜行われます)。
LENNAME
が存在する場合、それはホスト名の長さを受け取ります。
ホスト名が得られなかった場合にはLENNAME
は0となります。
PURE SUBROUTINE getlogin(s,lens) CHARACTER(*),OPTIONAL,INTENT(OUT) :: s INTEGER(int32),OPTIONAL,INTENT(OUT) :: lens呼出し元プロセスに付随したユーザ名(ログイン名)にアクセスします。
S
が存在する場合、名称を文字列で受け取ることができます(ログイン名の長
さがS
の長さと異なった場合には、空白の追加、あるいは切取りが適宜行われ
ます)。
LENS
が存在する場合、それはログイン名の長さを受け取ります。
PURE INTEGER(id_kind) FUNCTION getpgrp()呼出し元プロセスのプロセスグループ番号を応答として返します。
PURE INTEGER(id_kind) FUNCTION getpid()呼出し元プロセスのプロセス番号を応答として返します。
PURE INTEGER(id_kind) FUNCTION getppid()呼出し元プロセスの親のプロセス番号を応答として返します。
PURE INTEGER(id_kind) FUNCTION getuid()呼出し元プロセスのユーザ番号を応答として返します。
PURE INTEGER(int32) FUNCTION iargc()
コマンド行引数の数を応答として返します。これは組込み関数
COMMAND_ARGUMENT_COUNT
によるものと同じ値ですが、プログラム名称が
得られなかったときにも-1を応答するという点が異なります(組込み関数の方は
プログラム名称が得られようが得られまいが同じ値0を応答します)。
SUBROUTINE isatty(lunit,answer,errno) INTEGER(*),INTENT(IN) :: lunit LOGICAL(*),INTENT(OUT) :: answer INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno
LUNIT
で特定される論理装置が端末と接続されている場合に限り、
ANSWER
は値.TRUE.
を受け取ります。
LUNIT
が正しい装置番号ではなかった場合、あるいはどのファイルにも
接続されていなかった場合、エラーEBADF
(F90_UNIX_ERRNO
参照)
が発生します。
SUBROUTINE setgid(gid,errno) INTEGER(*),INTENT(IN) :: gid INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno呼出し元プロセスのグループ番号を
GID
にセットします。
詳細についてはISO/IEC 9945-1:1990のセクション4.2.2をご参照ください。
GID
が正しいグループ番号ではなかった場合、エラーEINVAL
(F90_UNIX_ERRNO
参照)が発生します。
プロセスがグループ番号をGID
にセットすることを許されていなかった
場合、エラーEPERM
が発生します。
SUBROUTINE setpgid(pid,pgid,errno) INTEGER(*),INTENT(IN) :: pid, pgid INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errnoプロセス
PID
(PID
が0の場合には呼出し元プロセス)のプロセスグルー
プ番号をPGID
にセットします。
詳細についてはISO/IEC 9945-1:1990のセクション4.3.3をご参照ください。
起りうるエラーにはEACCES
, EINVAL
, ENOSYS
,
EPERM
, ESRCH
があります(F90_UNIX_ERRNO
参照)。
SUBROUTINE setsid(sid,errno) INTEGER(id_kind),OPTIONAL,INTENT(OUT) :: sid INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errnoセッションを作成し、呼出し元プロセスのプロセスグループ番号をセットします。 詳細についてはISO/IEC 9945-1:1990のセクション4.3.2をご参照ください。
SID
が存在する場合、それは新たなセッションID(プロセスIDに等しい)
を受け取ります。エラーが生じた場合には-1がセットされます。
起りうるエラーにはEPERM
があります(F90_UNIX_ERRNO
参照)。
SUBROUTINE setuid(uid,errno) INTEGER(*),INTENT(IN) :: uid INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno呼出し元プロセスのユーザ番号を
UID
にセットします。
詳細についてはISO/IEC 9945-1:1990のセクション4.2.2をご参照ください。
UID
が正しいユーザ番号ではなかった場合、エラーEINVAL
(F90_UNIX_ERRNO
参照)が発生します。
プロセスがユーザ番号をUID
にセットすることを許されていなかった
場合、エラーEPERM
が発生します。
SUBROUTINE sysconf(name,val,errno) INTEGER(*),INTENT(IN) :: name INTEGER(*),INTENT(OUT) :: val INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errnoシステム構成変数の値を応答として返します。 変数名はこのモジュール中で定義される整数パラメータ(セクション“パラメータ” の項を参照)によって指定します。
NAME
が正しい構成変数の名前でなかった場合、エラーEINVAL
(F90_UNIX_ERRNO
参照)が発生します。
VAL
が結果を収容するには余りに小さな整数種別であった場合、エラー
ERANGE
が発生します。種別LONG_KIND
であればすべての値に
対応できるだけの大きさが保証されています。
SUBROUTINE time(itime,errno) INTEGER(time_kind),INTENT(OUT) :: itime INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno
ITIME
はEpochを起点とする日付/時刻(秒単位)を受け取ります。
INTEGER(KIND=clock_tick_kind) FUNCTION times(buffer) TYPE(tms),INTENT(OUT) :: bufferこの関数は過去の任意の時点からの経過実時間(単位はクロック刻み)を応答として 返します。関数が使用できない場合には-1が応答となります。
BUFFER
には呼出し元プロセスとすべての終了した子プロセスに対するCPUタイ
ム情報がセットされます。
この関数が0を応答した場合には、BUFFER
中の値は正しいですが、経過時間
タイマは利用できなかったことを意味します。
SUBROUTINE ttyname(lunit,s,lens,errno) INTEGER(*),INTENT(IN) :: lunit CHARACTER(*),OPTIONAL,INTENT(OUT) :: s INTEGER(int32),OPTIONAL,INTENT(OUT) :: lens INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errno
LUNIT
で特定される論理装置に接続された端末の名称をアクセスします。
S
が存在する場合、それは端末名の文字列を受け取ります(端末名の長さが
S
の長さと異なった場合には、空白の追加、あるいは切取りが適宜行われま
す)。
LENS
が存在する場合、それは端末名の長さを受け取ります。
ERRNO
が存在する場合、それはエラーステータスを受け取ります。
LUNIT
が正しい論理装置番号でなかった場合、あるいは接続されていなかっ
た場合、エラーEBADF
(F90_UNIX_ERRNO
参照)が発生します。
SUBROUTINE uname(name,errno) TYPE(UTSNAME),INTENT(OUT) :: name INTEGER(error_kind),OPTIONAL,INTENT(OUT) :: errnoOSに関する情報を
NAME
中にセットします。