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_versionSYSCONFへの引数として用いられる値。 次の表は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 TYPEUNAMEによって返されるデータを保持するための構造型。 個々の成分の文字長は固定ですが、それぞれのシステムによって異なる可能性が あるので注意してください。 これら成分中のデータは空白によって埋められたり(短かった場合)、切り取ら れたり(長かった場合)します。 さらなる情報については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) :: errnoNAMEで指定された環境変数にアクセスします。 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) :: errnoLUNITで特定される論理装置が端末と接続されている場合に限り、 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) :: errnoITIMEは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) :: errnoLUNITで特定される論理装置に接続された端末の名称をアクセスします。 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中にセットします。