| Fortran ライブラリ・リファレンス |
Fortran ライブラリルーチン
この章では、Fortran のライブラリルーチンをアルファベット順に説明します。VMS の組み込み関数については、『FORTRAN 77 言語リファレンス』を参照してください。本章で説明するルーチンにはすべて、対応するマニュアルページがマニュアルライブラリのセクション 3F に用意されています。たとえば、
man -s 3F accessを実行すると、accessというライブラリルーチンに関するマニュアルページの内容が表示されます。Fortran や C から呼び出しが可能な上記以外の数学ルーチンについては、『数値計算ガイド』も参照してください。呼び出し可能な数学ルーチンには、
libmやlibsunmathの標準数学ライブラリルーチン (Intro(3M)参照)、これらのライブラリの最適化バージョン、SPARC ベクタ数学ライブラリlibmvecなどがあります。データ型について
特に指示がない限り、本章に記載する関数ルーチンは、組み込みルーチンではありません。
したがって、関数から返されるデータ型が、関数名だけを指定した場合に仮定されるデータ型と食い違う可能性がある場合は、ユーザーが明示的にデータ型を宣言する必要があります。たとえば、
getpid() でINTEGER*4を戻す場合は、INTEGER*4 getpidと宣言しないと、結果の正しい処理が保証されません (データ型を明示的に指定しないと、関数名がgで開始するため、REAL(実数) 型の結果が仮定される)。なお、こういったルーチンについては、その機能要約で明示的な型宣言文が覚え書きの目的で記載されています。引数および戻り値のデータ指定は、
IMPLICIT文および-r8、-i2、-dbl、-xtypemapといった各コンパイラオプションによっても変更されることに注意してください。これらのライブラリルーチンを呼び出す際に、期待するデータ型と実際のデータ型が一致していないと、プログラムは予期しない動きをします。 コンパイラオプション-r8、-dblを指定すると、INTEGER関数のデータ型はINTEGER*8に、REAL関数はREAL*8に、DOUBLE関数はDOUBLE*16にそれぞれ変更されます。こういった問題を回避するには、ライブラリ呼び出しで指定する関数名と変数について、期待するそれらのサイズを明示的に指定する必要があります。次の例を参考にしてください。
integer*4 seed, getuidreal*4 ran...seed = 70198val = getuid() + ran(seed)...上記の例のようにサイズを明示的に指定しておくと、コンパイラオプションとして
-r8と-dblを指定しても、ライブラリ呼び出しの際にデータ型の変更が行われません。明示的な指定が行われない場合は、これらのコンパイラオプションによって、予期しない結果を招く可能性があります。これらのオプションの詳細については、『Fortran ユーザーズガイド』およびf77(1) とf95(1) マニュアルページを参照してください。旧オプションの
-i2、-r8、-dblの代わりに、より柔軟な-xtypemapオプションを使用してください。Fortran コンパイラの広域プログラムチェックオプション
-Xlistを使用すると、ライブラリコール全体のデータ型のミスマッチに関連した多数の問題を把握できます。f77およびf95コンパイラによる広域プログラムチェックについては、『Fortran ユーザーズガイド』、『Fortran プログラミングガイド』、およびマニュアルページのf77(1) とf95(1) で説明しています。64 ビット環境
プログラムを 64 ビットのオペレーティング環境で動作するようにコンパイルすると
(つまり、-xarch=v9またはv9aを使ってコンパイルし、64 ビット Solaris 7 オペレーティング環境を実行する SPARC プラットフォーム上で実行可能プログラムを実行すること)、特定の関数の戻り値が変更されます。この特定の関数は、通常、malloc(3F) (74ページ参照) などの標準システムレベルのルーチンとのインタフェースとなり、その環境に応じて 32 ビット値または 64 ビット値をとったり、戻したりできます。32 ビットと 64 ビット環境間でコードに互換性を持たせるために、これらのルーチンの 64 ビットバージョンは、必ず 64 ビット値をとるまたは戻す (あるいはこの両方を行う) ように規定されています。次の表に、64 ビット環境で使用するために提供されたライブラリルーチンを表示します。
表 1 64 ビット環境向けライブラリルーチン fseeko64大規模ファイルの再位置付け 34 ページ ftello64大規模ファイルの位置付け 34 ページ stat64,ファイルの状態を決定する 95 ページ fstat64,lstat64time64,システム時間を取得し、文字に変換するか 97 ページ ctime64,月、日などに分解する gmtine64,ltime64qsort64配列の要素をソートする 81 ページ
Fortran 数学関数
次の関数とサブルーチンは、Fortran 数学ライブラリの一部です。これらの関数とサブルーチンは、
f77やf95でコンパイルしたすべてのプログラムで使用することができます。ルーチンには、その引数と同じデータ型 (単精度、倍精度、または 4 倍精度)を戻す組み込み関数と、引数として特定のデータ型をとり、それと同じデータ型を戻す非組み込み関数があります。この非組み込み関数は、これを参照するルーチン内で宣言する必要があります。こうしたルーチンの大半は、C 言語ライブラリのルーチンに対する Fortran のインタフェースである「ラッパー」であり、したがって、標準の Fortran ではありません。この中には、IEEE 推奨のサポート関数や特殊な乱数発生関数があります。これらのライブラリの詳細については、『数値計算ガイド』やマニュアルページ
libm_single(3F)、libm_double(3F)、libm_quadruple(3F) を参照してください。数学関数
以下に、数学関数をリストします。これらは、型宣言文内に入れる必要はありません。以下の関数は、引数として単精度、倍精度、または 4 倍精度データをとり、同じものを戻します。
log(x) acos(x) asind(x) log10(x) atan(x) acosd(x) exp(x) atan2(x,y) atand(x) x**y sinh(x) atan2d(x,y) sin(x) cosh(x) aint(x) cos(x) tanh(x) anint(x) tan(x) sind(x) nint(x)
関数
sind(x)、cosd(x)、asind(x)、acosd(x)、atand(x)、atan2d(x,y) は、Fortran 標準の一部ではありません。単精度関数
これらの副プログラムは、単精度の数学関数およびサブルーチンです。
通常、以下の数学単精度関数にアクセスする関数は、Fortran 規格の総称組み込み関数とは対応していません。データ型は通常の型決定規則によって決定されます。
デフォルトの型決定を保持している限り、
REAL文でこれらの関数の型を明示的に指定する必要はありません。("r" で始まる変数はREAL型、"i" で始まる変数はINTEGER型になります)これらのルーチンの詳細については、C 数学ライブラリのマニュアルページ (3M) を参照してください。たとえば、
r_acos(x) の場合は、マニュアルページのacos(3M) を参照します。
- 変数
c、l、p、s、u、x、yはREAL型です。IMPLICIT文が有効で、"r" で始まる名前を別のデータ型に対して指定する場合、これらの関数をREALとして明示的に指定します。sind(x)やasind(x)などでは、ラジアンではなく度が使用されます。libm_double : 倍精度関数
次の副プログラムは、倍精度の数学関数およびサブルーチンです。
通常、これらの関数は Fortran 規格の総称的な組み込み関数とは対応していません。データ型は、通常のデータ型決定規則によって決定されます。
これらのDOUBLE PRECISION関数はDOUBLE PRECISION文に指定する必要があります。詳細については、C ライブラリのマニュアルページを参照してください。
d_acos(x) のマニュアルページはacos(3M) です。
- 変数
c、l、p、s、u、x、yはDOUBLE PRECISION型です。DOUBLE PRECISION文に、または適当なIMPLICIT文でこれらの関数の型を明示的に指定します。sind(x)やasind(x)などでは、ラジアンではなく度が使用されます。4 倍精度関数
これらの副プログラムは、4 倍精度 (
REAL*16) の数学関数およびサブルーチンです (SPARC のみ)。通常、これらの関数は Fortran 規格の総称組み込み関数とは対応していません。データ型は通常の型決定規則によって決定されます。
4 倍精度関数は
REAL*16文に指定しなくてはなりません。
- 変数
c、l、p、s、u、x、yは 4 倍精度です。REAL*16文または適当なIMPLICIT文でこれらの関数の型を明示的に指定します。sind(x)やasind(x) などでは、ラジアンではなく度が使用されます。その他の 4 倍精度
libm関数を使用する必要がある場合、その呼び出しの前に$PRAGMA C<関数名> を使用してください。詳細については、『Fortran プログラミングガイド』の 第 11 章「C と Fortran のインタフェース」を参照してください。abort : 終了とコアファイルへの書き込み
call abort
abortは、入出力バッファをフラッシュ (バッファ内のデータを実際にファイルに書き込むこと) し、現在のディレクトリにコアファイルのメモリーダンプを作成して、処理を異常終了させます。コアダンプを制限、または行わないようにする方法については、limit(1) を参照してください。access : ファイルのアクセス権または有無の検査
name CHARACTER入力 ファイル名 mode CHARACTER入力 アクセス権 戻り値 INTEGER*4出力 status=0: 正常
status>0: エラーコード
accessは、name で指定したファイルに mode で指定したアクセス権でアクセスできるかどうかを決定します。mode で指定したアクセスが正常終了した場合は、ゼロが返されます。エラーコードを解釈する場合は、
gerror(3F) も参照してください。mode には、
r、w、xを単独で指定することも、任意の順序で 2 つ以上組み合わせて指定することも、あるいは空白を指定することもできます。r、w、xの意味はそれぞれ以下のとおりです。
INTEGER*4 access, statusstatus = access ( 'taccess.data', 'rw' )if ( status .eq. 0 ) write(*,*) "ok"if ( status .ne. 0 ) write(*,*) '読み/書き不可', status
INTEGER*4 access, statusstatus = access ( 'taccess.data', ' ' ) ! 空白モードif ( status .eq. 0 ) write(*,*) "ファイル存在"if ( status .ne. 0 ) write(*,*) 'ファイルはない', statusalarm : 指定時間後のサブルーチンの呼び出し
time INTEGER*4入力 待ち時間の秒数 (0 の場合は呼び出さない) sbrtn ルーチン名 入力 実行する副プログラムは EXTERNAL 文で宣言しなければならない 戻り値 INTEGER*4出力 前回呼び出した alarm の残り時間
alarmの使用例: 9 秒待機してからsbrtnを呼び出します。
参照 :
alarm(3C)、sleep(3F)、signal(3F) 以下の制限事項に注意してください。
- サブルーチンは自分自身の名前を
alarmに渡すことはできません。alarmルーチンは、入出力に干渉する可能性のあるシグナルを発生させます。呼び出されたサブルーチン (sbrtn) では、いっさい入出力を実行してはなりません。- Fortran の並列プログラムまたはマルチスレッドプログラムから
alarm() を呼び出すと、予期しない結果を招くことがあります。bit : ビット関数
定義
は以下のとおりです。MIL-STD-1753 の代替外部バージョンは以下のとおりです。
「mvbits : ビットフィールドの移動」と『FORTRAN 77 言語リファレンス』 の第 6 章「組み込み関数」も参照してください。
and、or、xor、not、rshift、lshift の使用法
x = or(word1, word2)x = xor(word1, word2)x = not(word)x = rshift(word, nbits)x = lshift(word, nbits)
word、word1、word2、および nbits は、整数型の入力引数です。これらは組み込み関数で、コンパイラによりインライン展開されます。戻されるデータの型は、第 1 引数のデータ型です。
bic、bis、bit、setbit の使用法
call bic(bitnum,word)call bis(bitnum,word)call setbit(bitnum,word,state) LOGICAL bitx= bit(bitnum,word)bitnum、state、および word は、
INTEGER*4型の入力引数です。bit()関数では、論理値が返されます。ビットは、ビット 0 が最下位ビット、ビット 31 が最上位ビットになるように番号が付けられます。
bic、bisおよびsetbitは外部サブルーチン、bitは外部関数です。例 3 :
bic、bis、setbit、bit
chdir : デフォルトディレクトリの変更
dirname CHARACTER入力 ディレクトリ名 戻り値 INTEGER*4出力 n=0: 正常、 n>0: エラーコード 例 :
chdir−現在の作業ディレクトリをMyDirに変更します。
INTEGER*4 chdir, nn = chdir ( 'MyDir' )if ( n .ne. 0 ) stop 'chdir: エラー'end参照 :
chdir(2)、cd(1)、gerror(3F) (エラーコードの解釈)パス名は、
<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。相対パス名でも、絶対パス名でもかまいません。この関数を使用すると装置による照会が失敗する場合があります。
いくつかの Fortran のファイル操作は、ファイルを名前で再オープンします。入出力動作中に
chdirを使用すると、実行時システムが相対パス名で作成されたファイル (ファイル名を指定せずに open 文で作成されたファイルを含む) を見失ってしまうことがあります。chmod : ファイルのモードの変更
name CHARACTER入力 パス名 mode CHARACTER入力 chmod(1) に認識されるモード
(o-w、444など)戻り値 INTEGER*4出力 n= 0: 正常、
n> 0: システムエラー番号例 :
chmod−書き込み権をMyFileに追加します。
character*18 name, modeINTEGER*4 chmod, nname = 'MyFile'mode = '+w'n = chmod( name, mode )if ( n .ne. 0 ) stop 'chmod: エラー'end参照:
chmod(1)、gerror(3F) (エラーコードの解釈)パス名は、<
sys/param.h> で定義されているMAXPATHLENより長くすることはできません。date : 文字列として現在のデータを取得
注 - このルーチンは年を示す場合に 2 桁の値しか返さないので、「2000 年には無効」 になります。このルーチンの出力を使用して日付間の差を計算するプログラムは、1999 年12 月 31 日以降は正しく機能しなくなります。このdate( ) ルーチンを使用しているプログラムは、ルーチンの初期呼び出し時に実行時警告メッセージを表示してユーザーに警告します。このルーチンの代わりに呼びだすことのできるルーチンとして、data_and_time()を参照して下さい。
サブルーチンは、次のように呼び出します。
c CHARACTER*9出力 変数、配列、配列要素、あるいは部分列 戻される文字列 c の形式は、dd-mmm-yy です。ここで、dd は 2 桁の数値で表した日、mmm は 3 文字に省略した英語の月名、yy は 2 桁の数値で表した年 (2000年には対応していません) です。
「idate : 現在の日付を戻す」と、「date_and_time : 日付と時刻の取得」も参照してください。
date_and_time : 日付と時刻の取得
これは、Fortran 95 組み込みルーチンの FORTRAN 77 バージョンで、2000 年以降も有効です。
DATE_AND_TIMEサブルーチンはリアルタイムクロックと日付のデータを返します。現地時間の他に、現地時間と世界標準時 (UTC: Universal Coordinated Time)(グリニッジ平均時 (GMT: Greenwich Mean Time) とも呼ぶ) の時差も返します。
date_and_time( ) サブルーチンは、次のように呼び出します。
INTEGER*4valuesに返される 8 つの値は次のとおりです。
2000 年 2 月 16 日にカリフォルニアで実行した場合の出力は次のとおりです。
date_time 配列値:年= 2000month_of_year= 2day_of_month= 16時差(分)= -420時= 11分= 49秒= 29ミリ秒= 236DATE=20000216TIME=114929.236ZONE=-0700dtime、etime : 経過実行時間
これらの 2 つの関数は、経過実行時間 (あるいはエラー指示子として -1.0) を返します。返される時間は秒単位です。
Fortran 77 が使用する dtime と etime のバージョンは、実行時のシステムの高分解能クロックによって生成された時刻を返します。実際の分解能はシステムのプラットフォームによって違います。現在のプラットフォームのクロックの分解能は、1 ナノ秒から 1 マイクロ秒の範囲内です。
Fortran 95 が使用する
dtimeとetimeのバージョンは、デフォルトではシステムの低分解能クロックを使用します。分解能は 100 分の 1 秒です。ただし、プログラムが Sun OSTM オペレーティングシステムのユーティリティptime(1)、(/usr/proc/bin/ptime) の下で実行された場合は、高分解能クロックが使用されます。dtime : 前回の dtime 呼び出しからの経過時間
- 最初の呼び出し:実行開始からの経過時間
- 2 回目以降の呼び出し:前回の
dtimeの呼び出しからの経過時間- シングルプロセッサ:CPU の使用時間
- マルチプロセッサ:すべての CPU 使用合計時間 (あまり便利ではないので、
etimeを使用してください)
注 - 並列化ループ内からdtimeを呼び出すと、決定性のない結果になります。経過時間カウンタが、ループに関与しているすべてのスレッドに対してグローバルであるためです。
tarray REAL(2)出力 e= -1.0: エラー: tarray 値は未定義 e -1.0: tarray(1) にユーザー時間 (エラーがない場合) tarray(2) にシステム時間 (エラーがない場合
戻り値 REAL出力 e= -1.0: エラー e -1.0: tarray(1) と tarray(2) の合計時間
etime : 実行開始からの経過時間
Fortran は、シングルプロセッサとマルチプロセッサを以下のように区別します。
libF77_mtとリンクした並列 Fortran プログラムでは、環境変数がPARALLELの場合、次のようになります。
etimeの初期呼び出しで返される結果は不正確です。初期呼び出しでは、単にシステムクロックを稼働させるだけなので、etimeの初期呼び出しで返された値は使用しないでください。
times(2)、f77(1) のマニュアルページ、および『Fortran プログラミングガイド』も参照してください。exit : プロセスの終了および状態の設定
call exit( status )status INTEGER*4入力
...if(dx .lt. 0.) call exit( 0 )...end
exitはフラッシュしてからプロセスのすべてのファイルを閉じ、その親プロセスがwaitを実行している場合は親プロセスに通知します。親プロセスは status の下位 8 ビットを使用できます。この 8 ビットは左に 8 ビットシフトされ、他のビットはすべてゼロになります (したがって status は 256 〜 65280 の範囲になります)。この呼び出しは復帰しません。
C の関数である
exitは、最終的なシステム終了動作が実行される前に整理の処理を行うことがあります。引数なしで
exitを呼び出すとコンパイル時警告メッセージが出され、自動的に引数にゼロが与えられます。
参照 :exit(2)、fork(2)、fork(3f)、wait(2)、wait(3f)fdate : ASCII 文字列で日付および時刻を戻す
string CHARACTER*24出力
CHARACTER fdate*24string =fdate()fdateを関数として使用する場合、それを呼び出すルーチンはfdateの型と長さを定義する必要がある戻り値 CHARACTER*24出力
character*24stringcall fdate( string )write(*,*) stringend
Wed Aug 3 15:30:23 1994
character*24fdatewrite(*,*) fdate()end参照 :
ctime(3)、time(3F)、idate(3F)flush : 論理装置への出力のフラッシュ
lunit INTEGER*4Input 論理装置 Return value INTEGER*4Output n = 0 no error
n > 0 error number
flush関数は、論理装置lunitに対するバッファの内容を結合されているファイルにフラッシュします。このサブルーチンが最も役に立つのは、論理装置 0 と 6 がどちらもコンソールに結合されていて、それらの装置に対してこのサブルーチンを使用する場合です。関数はエラーが発生すると、正のエラー番号を返し、エラーが発生しないとゼロを返します。
fork : 現プロセスのコピーの生成
戻り値 INTEGER*4出力 n>0: n= コピーのプロセス識別子 n<0, n= (システムエラーコード )
fork関数はそれを呼び出したプロセスのコピーを生成します。元のプロセスとコピーとの違いは、元のプロセス (親プロセスと呼ばれる) に返される値がコピーのプロセス識別子であるということだけです。コピーは一般に子プロセスと呼ばれます。子プロセスに返される値はゼロです。書き込み用に開いているすべての論理装置は
、forkが実行される前にフラッシュされます。これは入出力バッファの内容が外部ファイルに重複して書き込まれるのを防ぎます。
INTEGER*4 fork, pidpid = fork()if(pid.lt.0) stop 'フォーク失敗'if(pid.gt.0) thenprint *, '親プロセス'elseprint *, '子プロセス'endif
forkルーチンと対をなすexecルーチンは提供されていません。これは論理装置を開いたままでexecルーチンに渡せる良い方法がないためです。ただし、system(3F) を使用すればfork/execの通常の機能を実行することができます。参照 :
fork(2)、wait(3F)、kill(3F)、system(3F)、perror(3F)free : Malloc により割り当てられた記憶領域の
割り当て解除
ptr pointer入力
freeはmallocにより先に割り当てられた記憶領域の割り当てを解除します。
記憶領域はメモリーマネージャに返されますが、ユーザーのプログラムの中でこれを使用することはできなくなります。
real xpointer ( ptr, x )ptr = malloc ( 10000 )call free ( ptr )end詳細については、「malloc、malloc 64: 記憶領域の割り当てとそのアドレスの獲得」を参照してください。
fseek、ftell : ファイルのポインタの位置付けと再位置付け
fseekおよびftellは、ファイルの再位置付けを可能にするルーチンです。ftellは、ファイルの現在位置をファイルの先頭からのオフセットを示すバイト数で返します。プログラムの後方で、この値を使用してfseekを呼ぶことにより、ファイルの読み込み位置を元に戻すことができます。fseek : 論理装置上のファイルのポインタの再位置付け
注 - 順編成ファイルでは、fseek64に続く呼び出しの後の出力操作 (WRITE など) は、fseekの位置に続くすべてのデータレコードの削除、新しいデータレコード (とファイルの終わりのマーク) での書き換えの原因となります。正しい位置へのレコードの書き換えは、直接アクセスファイルでのみ実行可能です。
例 :
fseek()−MyFileのポインタを先頭から 2 バイトの位置に再位置付けします。
INTEGER*4 fseek, lunit/1/, offset/2/, from/0/, nopen( UNIT=lunit, FILE='MyFile' )n = fseek( lunit, offset, from )if ( n .gt. 0 ) stop 'fseek エラー'end例 : 上記の例を 64 ビット環境で、
-xarch=v9を使ってコンパイルすると次のようになります。
INTEGER*4 fseek, lunit/1/, from/0/, nINTEGER*8 offset/2/open( UNIT=lunit, FILE='MyFile' )n = fseek( lunit, offset, from )if ( n .gt. 0 ) stop 'fseek error'endftell : ファイルの現在位置を戻す
INTEGER*4 ftell, lunit/1/, nopen( UNIT=lunit, FILE='MyFile' )...n = ftell( lunit )if ( n .lt. 0 ) stop 'ftell エラー'...例 : 上記の例を 64 ビット環境で、
-xarch=v9を使ってコンパイルすると次のようになります。
INTEGER*4 lunit/1/INTEGER*8 ftell, nopen( UNIT=lunit, FILE='MyFile' )...n = ftell( lunit )if ( n .lt. 0 ) stop 'ftell error'...参照 :
fseek(3S)、perror(3F)、fseeko64(3f)、ftello64(3f)fseeko64、ftello64: 大規模ファイルのポインタの位置付けと再位置付け
fseeko64とftello64は、それぞれfseekとftellの 「大規模ファイル」 バージョンです。fseeko64とftello64は、Solaris 2.6 と 7 でINTEGER*8ファイル位置のオフセットを入出力します。(「大規模ファイル」 とは 2G バイトを超えるファイルのことで、バイト位置は 64 ビットの整数で示します。) これらのバージョンを使用して、大規模ファイルのポインタの位置付けや再位置付けを行います。fseeko64: 論理装置上のファイルのポインタの再位置付け
注 - 順編成ファイルでは、fseek 64に続く呼び出しの後の出力操作 (WRITE など) は、fseekの位置に続くすべてのデータレコードの削除、新しいデータレコード (とファイルの終わりのマーク) での書き換えの原因となります。正しい位置へのレコードの書き換えは、直接アクセスファイルでのみ実行可能です。
例 :
fseeko64( )-MyFileのポインタを先頭から 2 バイトの位置に再位置付けします。
INTEGER fseeko64, lunit/1/, from/0/, nINTEGER*8 offset/200/open( UNIT=lunit, FILE='MyFile' )n = fseeko64( lunit, offset, from )if ( n .gt. 0 ) stop fseek エラー'endftello64: ファイルの現在位置を戻す
INTEGER*8 ftello64n =ftello64( lunit )lunit INTEGER*4入力 開いている論理装置 戻り値 INTEGER*8出力 n��0: n=ファイルの先頭からのオフセットを示すバイト数 n<0: n=システムエラーコード 例 :
ftello64( ):
INTEGER*8 ftello64, lunit/1/, nopen( UNIT=lunit, FILE='MyFile' )...n = ftello64( lunit )if ( n .lt. 0 ) stop 'ftell エラー'...getarg、iargc : コマンド行の引数の取得
getargとiargcは、コマンド行プリプロセッサによって展開されたコマンド行引数にアクセスします。getarg : コマンド行の引数の取得
k INTEGER*4入力 引数の索引 (0 = 最初の引数 = コマンド名) arg CHARACTER*n出力 k 番目の引数 n INTEGER*4引数のサイズ 最も長い引数が入るだけの大きさ iargc : コマンド行の引数の個数の取得
戻り値 INTEGER*4出力 コマンド行の引数の個数 例 :
iargcとgetarg: 引数の個数を調べ、各引数を読み取ります。
getc、fgetc : 次の文字の取得
getcとfgetcは、入力ストリームから次の文字を読み取ります。同じ論理装置上では、これらのルーチンの呼び出しを通常の Fortran の入出力と混合して使用しないでください。getc : 標準入力からの次の文字の取得
char CHARACTER出力 次の文字 戻り値 INTEGER*4出力 status=0: 正常 status=-1: ファイルの終了 status>0: システムエラーコードまたは f77入出力エラーコード例 :
getcでキーボードから文字を 1 文字ずつ入力します。Control-D (�D) に注意してください。
character charINTEGER*4 getc, statusstatus = 0do while ( status .eq. 0 )status = getc( char )write(*, '(i3, o4.3)') status, charend doend上記のソースプログラムを (コンパイル後に) 実行した例を以下に示します。
どの論理装置に対しても、通常の Fortran の入力と
getc()を混在して使用しないでください。fgetc : 指定した論理装置からの次の文字の取得
lunit INTEGER*4入力 論理装置 char CHARACTER出力 次の文字 戻り値 INTEGER*4出力 status=-1: ファイルの終了 status>0: システムエラーコードまたは f77入出力エラーコード例 :
fgetcでtfgetc.dataから文字を 1 文字ずつ読み取ります。改行 (8 進の 012) に注意してください。
character charINTEGER*4 fgetc, statusopen( unit=1, file='tfgetc.data' )status = 0do while ( status .eq. 0 )status = fgetc( 1, char )write(*, '(i3, o4.3)') status, charend doend上記のソースプログラムを (コンパイル後に) 実行した例を以下に示します。
demo%cat tfgetc.dataabyzdemo%a.out0 141 � `a'が読み取られる。0 142 � `b'が読み取られる。0 012 �改行が読み取られる。0 171 � `y'が読み取られる。0 172 � `z'が読み取られる。0 012 �改行が読み取られる。-1 012 � Control-Dが読み取られる。demo%どの論理装置に対しても、通常の Fortran の入力と
fgetc()を混在して使用しないでください。参照 :
getc(3S)、intro(2)、perror(3F)getcwd : 現在のディレクトリパスの取得
dirname CHARACTER*n出力 現在のディレクトリのパスが返される。 現在のディレクトリのパス名。 n は、最も長いパス名が入るのに十分な大きさであることが必要 戻り値 INTEGER*4出力 status=0: 正常 status>0: エラーコード
INTEGER*4 getcwd, statuscharacter*64 dirnamestatus = getcwd( dirname )if ( status .ne. 0 ) stop 'getcwd: エラー'write(*,*) dirnameend参照 :
chdir(3F)、perror(3F)、getwd(3)
注 - パス名を<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。
getenv : 環境変数の値の取得
ename CHARACTER*n入力 検索する環境変数の名前 evalue CHARACTER*n出力 見つかった環境変数の値。
見つからなかった場合は空ename と evalue には、それぞれの文字列が十分入るだけの大きさが必要です。
getenvサブルーチンは環境リストから ename=evalue の形式の文字列を検索し、その文字列があった場合には evalue の値を返し、なかった場合には evalue に空白を詰めます。例 :
$SHELLの値を印刷するには、getenv()を使用します。
character*18 evaluecall getenv( 'SHELL', evalue )write(*,*) "'", evalue, "'"endgetfd : 外部装置番号に対するファイル記述子の取得
unitn INTEGER*4入力 外部装置番号 戻り値 INTEGER*4またはINTEGER*8出力 ファイルが結合されている場合はファイル記述子、結合されていない場合は -1。 64 ビット環境用にコンパイルすると、結果として INTEGER*8が戻る。
INTEGER*4 fildes, getfd, unitn/1/open( unitn, file='tgetfd.data' )fildes = getfd( unitn )if ( fildes .eq. -1 ) stop 'getfd: ファイルは結合されていません'write(*,*) 'ファイル記述子 = ', fildesendgetfilep : 外部装置番号に対するファイル
ポインタの取得
c_read C 関数 入力 この C 関数はユーザーが書く。下記の例を参照 unitn INTEGER*4入力 外部装置番号 getfilep INTEGER*4またはINTEGER*8戻り値 ファイルが結合されている場合はファイルポインタ、結合されていない場合は -1。 64 ビット環境用にコンパイルすると、 INTEGER*8の値が戻る。この関数は標準 Fortran の入出力と C の入出力を混在させるために使用します。このような混在は移植不可能であり、今後リリースされるオペレーティングシステムまたは Fortran で使用できる保証はありません。したがって、この関数の使用は勧められませんし、直接のインタフェースは提供されていません。ユーザーは
getfilepが戻す値を使用するために 独自の C ルーチンを作成する必要があります。C ルーチンの例を以下に示します。例 : Fortran は C の関数に渡すのに
getfilepを使用します。
getfilepを実際に使用する C 関数の例を以下に示します。
tgetfilepC.c#include <stdio.h>int c_read_ ( fd, buf, nbytes, buf_len )FILE **fd ;char *buf ;int *nbytes, buf_len ;{return fread( buf, 1, *nbytes, *fd ) ;}上記のソースプログラムをコンパイル、リンク、実行した例を以下に示します。
demo% 11% cc -c tgetfilepC.cdemo% 12% f77 tgetfilepC.o tgetfilepF.ftgetfileF.f:MAIN:demo% 13% a.out数字は何 ? 3C の読んだ数字は 3demo% 14%詳細については、『Fortran プログラミングガイド』の 第 11 章「C と Fortran のインタフェース」を参照してください。
参照 :open(2)getlog : ユーザーのログイン名の取得
name CHARACTER*n出力 ユーザーのログイン名。プロセスが端末から切り離されて実行されている場合はすべて空白。n は、最も長い名前が入るのに十分な大きさであることが必要
character*18 namecall getlog( name )write(*,*) "'", name, "'"endgetpid : プロセス識別子の取得
戻り値 INTEGER*4出力 現プロセスのプロセス識別子 (ID)
INTEGER*4 getpid, pidpid = getpid()write(*,*) 'プロセスID = ', pidendgetuid、getgid : プロセスのユーザー識別子
またはグループ識別子の取得
getuidとgetgidはそれぞれ、ユーザー識別子またはグループ識別子を読み取ります。getuid : プロセスのユーザー識別子の取得
戻り値 INTEGER*4出力 プロセスのユーザー識別子 (ID) getgid : プロセスのグループ識別子の取得
戻り値 INTEGER*4出力 プロセスのグループ識別子 (ID)
INTEGER*4 getuid, getgid, gid, uiduid = getuid()gid = getgid()write(*,*) uid, gidendhostnm : 現在のホスト名の獲得
name CHARACTER*n出力 現在のホストの名前。 n は、ホスト名が入るのに十分な大きさであることが必要 戻り値 INTEGER*4出力 status=0: 正常, status>0: エラー
INTEGER*4 hostnm, statuscharacter*8 namestatus = hostnm( name )write(*,*) 'ホスト名 = "', name, '"'endidate : 現在の日付を戻す
- 標準バージョン - 現在のシステム日付を整数配列 (日、月、および年) に入れる。
- VMS バージョン - 現在のシステム日付を 3 つの整変数 (日、月、および年) に入れる。
このバージョンは「2000 年には無効」になる。
-lV77というコンパイラオプションは、VMS ライブラリを要求し、time()とidate()の VMS バージョンにリンクします。このオプションを指定しないと、リンカーは標準バージョンにアクセスします。(ライブラリルーチンのVMSバージョンは、f77では-lv77ライブラリオプションを指定すると使えますが、f95では使用できません。)標準バージョンでは、現在のシステム日付を 1 つの整数配列に日、月、年の順で入れます。
iarray INTEGER*4出力 3 要素数の配列。日、月、年
demo%cat tidate.fINTEGER*4 iarray(3)call idate( iarray )write(*, "(' 日付は: ',3i5)" ) iarrayenddemo%f77 -silent tidate.fdemo%a.out日付は: 10 8 1998demo%VMS
idate( )サブルーチンは、次のように呼び出します。
m INTEGER*4出力 月 (1 - 12) d INTEGER*4出力 日 (1 - 7) y INTEGER*4出力 年 (1 - 99) 2000 年には無効 VMS
idate( ) ルーチンを使用すると、リンク時とルーチンを初めて呼び出して実行するときに警告メッセージが出力されます。
注 -idate( ) ルーチンの VMS バージョンは年を示す場合に 2 桁の値しか返さないので、2000 年には無効になります。このルーチンの出力を使用して日付間の差を計算するプログラムは、1999 年 12 月 31 日以降は正しく機能しなくなります。このidate( ) ルーチンを使用しているプログラムは、ルーチンの初期呼び出し時に実行時警告メッセージを表示してユーザーに警告します。このルーチンの代わりに呼び出すことのできるルーチンとして、date_and_time( ) を参照してください。
ieee_flags、ieee_handler、sigfpe :
IEEE 算術演算これらの副プログラムは、Fortran プログラムで ANSI/IEEE 規格 754-1985 の算術演算機能を十分に利用するために必要なモードと状態を提供します。これらの副プログラムは関数
ieee_flags(3M)、ieee_handler(3M)、およびsigfpe(3) と密接に対応しています。
これらの関数を効果的に使用する方法については、『数値計算ガイド』を参照してください。
sigfpeを使用する場合、浮動小数点状態レジスタ内の対応するトラップ可能マスクビットをユーザーが設定する必要があります。詳細は『SPARC アーキテクチャマニュアルバージョン 8』(トッパン刊) で説明されています。libm関数のieee_handlerを呼び出すと、ユーザーに代わってトラップ可能マスクビットを設定してくれます。mode とexception が受け付ける文字型のキーワードは、action の値によって異なります。
例 1 : (ハードウェアが方向をもつ丸めモードをサポートしていない場合を除いて) 丸め方向をゼロの方向に設定します。
INTEGER*4 ieeercharacter*1 mode, out, inieeer = ieee_flags( 'set', 'direction', 'tozero', out )例 2 : 丸め方向をクリアーします (デフォルトの方向、つまり四捨五入して丸めます)。
character*1 out, inieeer = ieee_flags('clear','direction', in, out )例 3 : 設定されている例外発生ビットをすべてクリアーします。
character*18 outieeer = ieee_flags( 'clear', 'exception', 'all', out )例 4 : 例 3 でオーバーフロー例外が発生すると、次のように検出します。
character*18 outieeer = ieee_flags( 'get', 'exception', 'overflow', out )if (out .eq. 'overflow' ) stop 'overflow'上記の例は、
outをoverflowにし、ieeerを 25 に設定しています。同様にコーディングすれば、invalidやinexactのような例外を検出できます。例 5 :
handl.fの内容。シグナルハンドラを書き込み、使用しています (f77)。
addressとfunction handの宣言をINTEGER*8に変更すると、64 ビットの SPARC V9 環境 (-xarch=v9) で例 5 が実行できます。『数値計算ガイド』を参照してください。
参照 :floatingpoint(3)、signal(3)、sigfpe(3)、f77_floatingpoint(3F)、ieee_flags(3M)、ieee_handler(3M)f77_floatingpoint.h : Fortran IEEE 定義
ヘッダーファイル
f77_floatingpoint.hは、ANSI/IEEE 規格 754-1985 に従って、標準浮動小数点の実装に使用される定数と型を定義します。このファイルの FORTRAN 77 ソースプログラムへのインクルードは、次のように行います。
#include "f77_floatingpoint.h"このインクルードファイルを使用するには、Fortran のコンパイル前に前処理が必要になります。このインクルードファイルを参照するソースファイルは、名前の拡張子が
.F、f90または.F95の場合に、自動的に前処理が行われます。Fortran 95 プログラムは、ファイル
/floatingpoint.hを代わりにインクルードします。IEEE 丸めモード
fp_direction_typeIEEE 丸め方向モードの型。列挙の順序はハードウェアにより異なるので注意すること。 SIGFPE 処理
IEEE 例外処理
IEEE クラス分類
fp_class_typeIEEE 浮動小数点の値と記号のクラスの並び 参照 :
ieee_environment(3M)、f77_ieee_environment(3F)index、rindex、lnblnk : 部分列の索引または長さ
rindex(a1, a2)文字列 a1 の中で最後に出現する文字列 a2 の索引 lnblnk(a1)文字列 a1 の中の最後の空白以外の文字の索引 index : 文字列の中で最初に出現する部分文字列
a1CHARACTER入力 文字列 a2CHARACTER入力 部分列 戻り値 INTEGER出力 n>0: a1 の中で最初に出現する a2 の索引
n=0: a1 の中に a2 が出現しない
INTEGER*8と宣言されている場合は、64 ビット環境用にコンパイルされ、さらに文字変数 a1 が非常に大きな文字列であるときに (2 ギガバイトを超えるもの)、index( ) はINTEGER*8値を戻します。rindex : 文字列の中で最後に出現する部分文字列
a1 CHARACTER入力 文字列 a2 CHARACTER入力 部分列 戻り値 INTEGER*4またはINTEGER*8出力 n>0: a1 の中で最後に出現する a2 の索引 n=0: a1 の中に a2 が出現しない。 64 ビット環境の場合は、 INTEGER*8が戻る。lnblnk : 文字列の中の最後の空白以外の文字
a1 CHARACTER入力 文字列 戻り値 INTEGER*4またはINTEGER*8出力 n>0: a1 の中の最後の空白以外の文字の索引 n=0: a1 はすべて空白以外の文字。 64 ビット環境の場合は、 INTEGER*8が戻る。
注 - 64 ビット環境で動作するようコンパイルされたプログラムは、非常に大きな文字列を処理するにはindex、rindex、およびlnblnk(および返される変数)INTEGER*8を宣言しなければなりません。
inmax : 正の整数の最大値の返却
戻り値 INTEGER*4出力 正の整数の最大値
INTEGER*4 inmax, mm = inmax()write(*,*) menddemo%f77 -silent tinmax.fdemo%a.out2147483647demo%参照 :
libm_single(3f)、libm_double(3f)参照 :『FORTRAN 77 言語リファレンス』に記載された、組み込み関数
ephuge( )ioinit : 入出力プロパティの初期化
IOINITルーチン (FORTRAN 77 のみ) は、IOINIT呼び出しの後に開かれているファイルに対して、入出力ファイルのプロパティを確定します。IOINITの制御する入出力プロパティは、次のとおりです。
- キャリッジ制御 - すべての論理装置でキャリッジ制御を認識する
- 空白/ゼロ - 入力データフィールド内の空白を空白またはゼロとして扱う
- ファイルのポインタの位置 - ファイルを開く際、ポインタをファイルの先頭または ファイルの終了に位置付ける
- 接頭辞 - 0 £ NN £ 19 で、 <接頭辞> NN という名前のファイルを探索し、開く
f77入出力プロパティファイルを指定する広域のパラメータを初期化します。- 指定した入出力プロパティファイルで、論理装置 0 から 19 までを開きます (外部に定義したファイルを実行時に論理装置に接続します)。
入出力プロパティファイルの継続
入出力プロパティファイルは接続がある限り適用されます。装置を閉じると、プロパティは適用されなくなります。あらかじめ割り当てられている装置 5 と 6 は例外で、それらの装置にはキャリッジ制御と空白/ゼロが常に適用されます。
内部フラグ
IOINITは、実行時の入出力システムと通信するために名前付き共通ブロックを使用します。IOINITは、次の名前付き共通ブロックと同等に内部フラグを格納します。
INTEGER*2 IEOF, ICTL, IBZRCOMMON /_ _IOIFLG/ IEOF, ICTL, IBZR ! ユーザーの名前空間ではない3.0.1 以前のリリースでは、名前付き共通ブロックは
IOIFLGと呼ばれていました。ユーザー定義の共通ブロックとの競合を防ぐため、この名前を __IOIFLGと変更しました。ソースコード
IOINITの一般的なバージョンではユーザーの要求に応じきれない場合があるため、ソースコードを提供しています。これは Fortran 77 で書かれており、次のように配置されています。
- <install>
/SUNWspro/<release>/src/ioinit.f- Sun WorkShop ソフトウェアパッケージの標準インストールを行った場合は、<install> は通常
/optになりますが、<release> パスはコンパイラのリリースごとに変わります。ioinit の使用法
制限
引数の説明
cctl (キャリッジ制御)
デフォルトでは、キャリッジ制御はどの論理装置でも認識されません。cctl が .
true. の場合、キャリッジ制御は、診断用チャネルである装置 0 を除いたすべての論理装置に対する書式付き出力で認識されます。cctl が .false. の場合は、デフォルトの設定に戻ります。bzro (空白)
デフォルトでは、入力データフィールド内の後続の空白と埋め込み空白は無視されます。bzro が .
true. の場合、これらの空白はゼロとして扱われます。bzro を .false. にした場合は、デフォルトの設定に戻ります。apnd (追加)
デフォルトでは、順次アクセス用に開かれたファイルは先頭に位置付けられます。ファイルの既存データに書き込みを追加する場合には、ファイル終了マークにポインタを位置付けてファイルを開くことが必要になったり、便利であったりします。apnd を .
true. にした場合、どの論理装置であっても、ファイルを開いた時にポインタはファイルの終わりに位置付けられます。apnd を .false. にした場合はデフォルトの設定に戻ります。prefix (自動ファイル結合)
引数 prefix が空白以外の文字列ならば、prefixNN という形式の名前がプログラム環境内で検索されます。検索されたそれぞれの名前に関連付けられている値は、論理装置 NN を書式付き順次アクセス用に開くために使用されます。
この検索と接続は、0 から 19 間の 0 と 19 を含む NN に対してのみ行われます。19 より大きい NN に対しては何も行われません。「ソースコード」を参照してください。
vrbose (IOINIT の活動状況)
引数 vrbose を .
true. にした場合、ioinitは自分自身の活動状況について報告します。例 : プログラム
myprogramは次のような呼び出しを行います。
call ioinit( .true., .false., .false., 'FORT', .false.)ファイル名の割り当ては、少なくとも次の 2 つの方法で行うことができます。
demo$FORT01=mydatademo$FORT12=myresultsdemo$export FORT01 FORT12demo$myprogram
demo%setenv FORT01 mydatademo%setenv FORT12 myresultsdemo%myprogramどちらの方法を使用しても、上記の例の
ioinit呼び出しからは以下の結果が得られます。
- 開かれた論理装置 1 に対してファイル
mydataを割り当てます。- 開かれた論理装置 12 に対してファイル
myresultsを割り当てます。- 上記 2 つのファイルのポインタを先頭に位置付けます。
- 書式付き出力の 1 桁目は除去され、キャリッジ制御と解釈されます。
- 埋め込み空白と後続の空白は入力時には無視されます。
shまたはcshを使用して以下のように環境変数を設定してください。
demo$FORT01=tioinit.datademo$FORT12=tioinit.audemo$export FORT01 FORT12demo$ioinit()
demo%setenv FORT01 tioinit.datademo%setenv FORT12 tioinit.auioinit()
demo%a.outdemo%cat tioinit.auabc 123PDQ 789ioinit()itime : 現在の時刻
itimeは、現在のシステム時刻の時、分、秒を整数配列に入れます。サブルーチンは、次のように呼び出します。
iarray INTEGER*4出力 3 要素の配列: iarray(1) = 時 iarray(2) = 分 iarray(3) = 秒
demo%cat titime.fINTEGER*4 iarray(3)call itime( iarray )write (*, "(' 時刻は: ',3i5)" ) iarrayenddemo%f77 -silent titime.fdemo%a.out時刻は: 15 42 35参照 :
time(3f)、ctime(3F)、fdate(3F)kill : プロセスへのシグナルの送信
pid INTEGER*4入力 ユーザーのプロセスのプロセス識別子 signum INTEGER*4入力 有効なシグナル番号。 signal(3) を参照戻り値 INTEGER*4出力 status=0: 正常 status>0: エラーコード 例 (該当部分のみ):
kill()を使用してメッセージを送ります。
INTEGER*4 kill, pid, signum* ...status = kill( pid, signum )if ( status .ne. 0 ) stop 'kill: エラー'write(*,*) 'シグナル ', signum, 'をプロセス ', pid, ' に送付しました'end関数は、signum という整数型の番号で現わされるシグナルを pid というプロセスに送ります。有効なシグナル番号は、
/usr/include/sys/signal.hという C 言語のインクルードファイル中にリストされています。参照 :
kill(2)、signal(3)、signal(3F)、fork(3F)、perror(3F)link、symlnk : 既存ファイルへのリンクの作成
linkは既存ファイルへのリンクを作成します。symlnkは既存ファイルへのシンボリックリンクを作成します。
link : 既存ファイルへのリンクの作成
例 1 :
link−ファイルtlink.db.data.1に対して、data1という名前のリンクを作成します。
symlnk : 既存ファイルへのシンボリックリンクの作成
例 2 :
symlnk−ファイルtlink.db.data.1に対して、data1という名前のシンボリックリンクを作成します。
参照 :
link(2)、symlink(2)、perror(3F)、unlink(3F)
注 - パス名を<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。
loc : オブジェクトのアドレスを戻す
arg 任意の型 入力 任意の変数、配列、または構造体の名前 戻り値 INTEGER*4またはINTEGER*8出力 arg のアドレス -xarch=v9を使って、64 ビット環境で動作するようにコンパイルした場合は、INTEGER*8ポインタが戻る。以下の注を参照。
INTEGER*4 k, locreal arg / 9.0 /k = loc( arg )write(*,*) kend
注 - 64 ビット Solaris 7 で動作するようコンパイルされたプログラムは、loc( ) 関数から出力を返す変数INTEGER*8を宣言しなければなりません。
long、short : 整数オブジェクトの変換
longおよびshortはINTEGER*4とINTEGER*2間で整数オブジェクトの変換を行います。この変換は、サブプログラム呼び出し一覧では特に有効です。long : 短整数 (INTEGER*2) から長整数 (INTEGER*4) への変換
int2 INTEGER*2入力 戻り値 INTEGER*4出力 short : 長整数から短整数への変換
int4 INTEGER*4入力 戻り値 INTEGER*2出力
integer*4 int4/8/, longinteger*2 int2/8/, shortcall ExpecLong( long(int2) )call ExpecShort( short(int4) )...end
ExpecLongはユーザープログラムによって呼び出されるサブルーチンで、長整数 (INTEGER*4) の引数をとります。ExpecShortは短整数 (INTEGER*2) の引数をとります。
longはライブラリルーチンの呼び出しに定数が使用され、-i2オプションを指定してコードをコンパイルする場合に役立ちます。
shortは、長い型のオブジェクトを短い型の整数として渡す必要がある場合に役立ちます。短い型に渡す整数が大きすぎた場合、エラーは発生しませんが、プログラムが予期しない動きをします。longjmp、isetjmp : isetjmp で設定した位置に戻す
isetjmpはlongjmpの位置を設定します。longjmpはisetjumpで設定した位置に戻ります。isetjmp : longjmp の設定
env INTEGER*4出力 env は 12 要素の整数配列 戻り値 INTEGER*4出力 ival = 0 、isetjmpが明示的に 呼び出された場合 ival � 0、isetjmpがlongjmpから呼び出された場合longjmp : isetjmp で設定した位置に戻す
env INTEGER*4入力 env は isetjmp で初期化された 12 語の整数配列 ival INTEGER*4出力 ival = 0、isetjmp が明示的に呼び出された場合 ival � 0、isetjmp が longjmp から呼び出された場合 説明
isetjmpとlongjmpルーチンは、プログラムの低レベルルーチンで遭遇するエラーや障害を処置するために使用します。この 2 つは、f77の組み込み関数です。これらのルーチンは、最後の手段としてのみ使用してください。これらの取り扱いには、十分注意してください。また、移植性はありません。バグやその他の詳細については、
setjmp(3V) のマニュアルページを参照してください。
isetjmpは env にスタック環境を保存します。またレジスタ環境も保存します。
longjmpは、最後にisetjmpを呼び出して保存した環境を復元し、あたかもisetjmpの呼び出しが値 ival を返したかのように戻り、実行を継続します。
isetjmpから返された整数式 ival は、longjmpが呼び出されなければゼロです。longjmpが呼び出されれば、ゼロ以外になります。例 :
isetjmpとlongjmpを使用したコード部分
制限
longjmp()を呼び出す前にisetjmpを起動しなければなりません。isetjmpとlongjmpで使用される整数型の配列引数 env は、最低 12 個の要素からなる配列でなければなりません。isetjmpを呼び出すルーチンからlongjmpを呼び出すルーチンへ、共通ブロック経由であるいは引数として env 変数を渡さなければなりません。longjmpはスタックをクリーンアップしようとします。longjmpはisetjmpよりも低レベルのルーチンから呼び出さなければなりません。- 手続き名の引数として
isetjmpを渡しても作用しません。malloc、malloc 64: 記憶領域の割り当てとそのアドレスの獲得
n INTEGER*4入力 記憶領域のバイト数 戻り値 INTEGER*4またはINTEGER*8出力 k>0: k は割り当てられた記憶領域の開始アドレス k=0: エラー -xarch=v9を使って、64 ビット環境用にコンパイルした場合は、INTEGER*8ポインタ値が戻る。以下の注を参照。
注 - Solaris 7 などの 64 ビット環境で動作するようにコンパイルされたプログラムでは、malloc()関数とその出力を受け取る変数をINTEGER*8と宣言する必要があります。互換性の問題を解決するには、32 ビット環境または 64 ビット環境の両方で実行する必要があるプログラム内で、malloc()の代わりにmalloc64()を使用します。
関数
malloc64(3F)は、プログラムを 32 ビット環境と 64 ビット環境間で互換性を持たせるために提供された関数です。
戻り値 INTEGER*8出力 k >0: k は割り当てられた記憶領域の開始アドレス k=0: エラー
これらの関数は、記憶領域を割り当て、その領域の開始アドレスを返します。(64 ビット環境では、この返されたバイトアドレスは、
INTEGER*4の数値範囲外になる可能性があります。受け取り側の変数ではINTEGER*8と宣言し、メモリーアドレスが切り捨てられないようにする必要があります。) このメモリーの領域は、初期化できません。そのためメモリー領域が、ある値、特にゼロに事前設定されているとは仮定しないでください。
parameter (NX=1000)pointer ( p1, X )real*4 X(NX)...p1 = malloc( NX*4 )if ( p1 .eq. 0 ) stop 'malloc: 割り当て不可'do 11 i=1,NX11 X(i) = 0....end上記の例では、
p1で指定される 4,000 バイトのメモリーを獲得し、この領域を 0 に初期化しています。詳細については、「free : Malloc により割り当てられた記憶領域の 割り当て解除」を参照してください。
mvbits : ビットフィールドの移動
サブルーチンは、次のように呼び出されます。
src INTEGER*4入力 移動元 ini1 INTEGER*4入力 移動元でのビットの初期位置 nbits INTEGER*4入力 移動させるビット数 des INTEGER*4出力 移動先 ini2 INTEGER*4入力 移動先でのビットの初期位置
- 各ビットには、最下位ビットから最上位ビットまで、0 から 31 までの番号が付けられます。
MVBITSは des のビット ini2 から ini2+nbits-1までを変更し、src のビットは変更しません。- 制限事項:
perror、gerror、ierrno : エラーメッセージの取得
これらのルーチンは、以下の関数を実行します。
gerrorシステムエラーメッセージ (最後に検出されたシステムエラーの) の読み取り ierrno最後に検出されたシステムエラーのエラー番号の読み取り perror : 論理装置 0 (stderr) へのメッセージ出力
string CHARACTER*n入力 メッセージ。標準エラーメッセージに先だって出力される。最後に検出されたシステムエラーに対するメッセージ
call perror( "ファイルは書式付き入出力用" )gerror : 最後に検出されたエラーメッセージの取得
string CHARACTER*n出力 最後に検出されたシステム
エラーのメッセージ
character string*30...call gerror ( string )write(*,*) string例 3 :
gerrorの関数としての使用 (この場合、string は使用しません)
character gerror*30, z*30...z = gerror( )write(*,*) zierrno : 最後に検出されたエラー番号の取得
戻り値 INTEGER*4出力 最後に検出されたシステムエラーの番号 この番号はエラーが実際に起こった時にしか更新されません。このようなエラーを発生させるほとんどのルーチンと入出力文は、呼び出しの後でエラーコードを返します。その値はエラー条件を引き起こした原因を示す信頼度の高いデータです。
INTEGER*4 ierrno, n...n = ierrno()write(*,*) nierrno()
perrorを呼び出す際の string は、127 文字を超えてはいけません。gerrorにより返される文字列の長さは、それを呼び出すプログラムにより決められます。f77とf95の実行時入出力エラーについては、『Fortran ユーザーズガイド』に記載されています。putc、fputc : 論理装置への 1 文字出力
putcは論理装置 6 に出力します。通常は制御端末への出力になります。これらの関数は、通常の Fortran 入出力をバイパスして、Fortran 論理装置に関連付けられているファイルに 1 文字を出力します。
同じ装置上では、通常の Fortran 出力とこれらの関数の出力を混在させて使用しないでください。
putc : 論理装置 6 への出力
char CHARACTER入力 装置に出力する文字 戻り値 INTEGER*4出力 status=0: 正常 status>0: システムエラーコード
character char, s*10 / 'OK by putc' /INTEGER*4 putc, statusdo i = 1, 10char = s(i:i)status = putc( char )end dostatus = putc( '\n' )enddemo%f77 -silent tputc.fdemo%a.outOK by putcdemo%fputc : 指定した論理装置への出力
lunit INTEGER*4入力 出力先装置 char CHARACTER入力 装置に出力する文字 戻り値 INTEGER*4出力 status=0: 正常 status>0: システムエラーコード
参照 :
putc(3S)、intro(2)、perror(3F)qsort、qsort 64 : 1 次元配列の要素のソート
64 ビット環境においては、2 ギガバイトを超える配列には
qsort64を使用します。この場合、INTEGER*8データとして、配列の長さは len8、要素サイズは isize8 に必ず指定してください。Fortran 95 型の定数を使用してINTEGER*8定数を明示的に指定します。
comparの引数である arg1 と arg2 は、配列の要素であり、次の結果を返します。
ゼロ arg1 と arg2 が等しい場合 正数 arg1 は arg2 の後に置かれると見なされる場合
ran : 0 - 1 間の乱数の生成
反復して
ranを呼び出すと、均一した分布で一連の乱数を生成します。
i INTEGER*4入力 変数または配列要素 r REAL出力 変数または配列要素
- 0.0 は範囲に含まれますが、1.0 は含まれません。
- 乗算合同型の一般乱数発生アルゴリズムを使用しています。
- 一般に、
iの値は呼び出し元のプログラム実行中で一度だけ設定されます。iの初期値は大きい奇数の整数でなければなりません。- 続けて
ranを呼び出すと、次々に別の乱数が得られます。- プログラムを実行するたびに異なる乱数の列を得るには、実行ごとに引数を異なる初期値に設定しなければなりません。
ranは引数を下記のアルゴリズムに従って、次の乱数計算用に値を格納するために使用します。
SEED = 6909 * SEED + 1 (MOD 2**32)SEEDは 32 ビット数値を含み、上位 24 ビットは浮動小数点に変換され、その値が返されます。rand、drand、irand : 乱数を戻す
randは 0.0 から 1.0 の範囲の実数値の乱数を返します。
drandは 0.0 から 1.0 の範囲の倍精度値の乱数を返します。
irandは 0 から 2147483647 の範囲の正の整数値の乱数を返します。これらの関数は
、random(3) を使用して乱数の列を発生させます。これらの 3 つの関数は、同じ 256 バイトの状態配列を共有します。3 つの関数の唯一の利点は、UNIX システムで幅広く利用できることです。乱数を生成するさらに優れた関数としては、lcrans、addrans、およびshufransがあります。random(3) および『数値計算ガイド』も参照して比較してください。
r = rand( k )d = drand( k )k INTEGER*4入力 k=0: 次の乱数を乱数列から取り出す k=1: 乱数列を再開し、最初の数を戻す k>0: 新しい乱列数の種として使用し、最初の数を戻す randREAL*4出力 drandREAL*8出力 irandINTEGER*4出力
integer*4 v(5), iflag/0/do i = 1, 5v(i) = irand( iflag )end dowrite(*,*) venddemo%f77 -silent trand.fdemo%a.out2078917053 143302914 1027100827 1953210302 755253631demo%rename : ファイルの名称変更
from CHARACTER*n入力 既存ファイルのパス名 to CHARACTER*n入力 ファイルの新しいパス名 戻り値 INTEGER*4出力 status=0: 正常 status>0: システムエラーコード to で指定されたファイルがすでに存在する場合、from と to はどちらも同じタイプのファイルでなければならず、かつ同じファイルシステムに存在していなければなりません。
to がすでに存在する場合、最初にそのファイルが削除されます。例 :
rename()−ファイルtrename.oldの名前をtrename.newに変更します。
注 - パス名を<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。
secnds : 秒単位のシステム時間 (マイナス引数) を取得
t0 REAL入力 定数、変数、あるいは配列要素 戻り値 REAL出力 午前 0 時からの秒数から t0 を引いた値
sh : sh コマンドの高速実行
string CHARACTER*n 入力 実行するコマンドを含んだ文字列戻り値 INTEGER*4 出力 実行されたシェルの終了状態。
この値の説明についてはwait(2) を参照
character*18 string / 'ls > MyOwnFile.names' /INTEGER*4 status, shstatus = sh( string )if ( status .ne. 0 ) stop 'sh: エラー'...end関数
shは、あたかも文字列がコマンドとしてキー入力されたかのように、shシェルに string を渡します。fork されたプロセスは、開いているファイルをすべてフラッシュします。
sh()はマルチスレッド対応ではありません。マルチスレッドプログラム、または並列プログラムからは呼び出さないでください。参照 :
execve(2)、wait(2)、system(3)
注 - string の長さは 1,024 文字を超えることができません。
signal : シグナルに対する動作の変更
proc が呼び出される場合、シグナル番号が整数の引数として渡されます。
プロセスがシグナルを受信した場合のデフォルトの動作は、通常はプロセスの終了処理と異常終了です。シグナル処理ルーチンは、特殊な処理を行うために特定の例外やインタラプトを捕獲することができます。
この関数の戻り値を後で
signalを呼び出す時に使用して、処理の定義を変更前に戻すことができます。エラーがなくても負数の戻り値が返されることがあるので注意してください。有効なシグナル番号を
signal()に渡して、戻り値が-1 未満であった場合は問題ありません。
f77はプロセスが起動されると一定のシグナルをトラップするための準備をします。デフォルトのf77の処理に戻すためには、signalを最初に呼び出した時の戻り値を保存しておかなければなりません。
f77_floatingpoint.hでは、SIGFPE_DEFAULT、SIGFPE_IGNOREおよびSIGFPE_ABORTという proc 値を定義しています。55ページを参照してください (f95ではfloatingpoint.hを使用)。64 ビット環境では、signal は、その出力を受け取る変数とともに
INTEGER*8と宣言し、返される可能性のあるアドレスが切り捨てられるのを防ぐ必要があります。参照 :
kill(1)、signal(3)、kill(3F)、『数値計算ガイド』sleep : 一定時間の実行中断
itime INTEGER*4入力 スリープする秒数システム時間記録が粗いので、実際の時間は itime よりも最大で 1 秒短くなることがあります。
INTEGER*4 time / 5 /write(*,*) '開始'call sleep( time )write(*,*) '終了'endstat、lstat、fstat : ファイルの状態の取得
statとlstatは、どちらもファイル名を用いて問い合わせをします。fstatは論理装置を用いて問い合わせをします。stat : ファイル名によるファイルの状態の取得
INTEGER*4 statierr =stat( name, statb )name CHARACTER*n入力 ファイルの名前 statb INTEGER*4出力 ファイル状態の情報が格納される要素数 13 の配列 戻り値 INTEGER*4出力 ierr=0: 正常 ierr>0: エラーコード
fstat : 論理装置によるファイルの状態の取得
INTEGER*4 fstatierr =fstat( lunit, statb )lunit INTEGER*4 入力 論理装置番号statb INTEGER*4出力 ファイル状態の情報が格納される要素数 13 の配列 戻り値 INTEGER*4出力 ierr=0: 正常 ierr>0: エラーコード
lstat : ファイル名によるファイルの状態の取得
ierr = lstat( name, statb )name CHARACTER*n入力 ファイル名 statb INTEGER*4出力 ファイル状態の情報が格納される要素数 13 の配列 戻り値 INTEGER*4出力 ierr=0: 正常 ierr>0: エラーコード
ファイル状態を格納する配列の詳細
INTEGE*4型の配列 statb に返される情報の意味は、stat(2) での構造体 stat の説明と同じです。
参照 :
stat(2)、access(3F)、perror(3F)、time(3F)
注 - パス名を<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。
stat64、lstat64、fstat64: ファイルの状態の取得
stat、lstat、fstatの 64 ビット 「ロングファイル」(Solaris 2.6 と 7) バージョンです。これらのルーチンは、要素数 13 の配列statbをINTEGER*8で宣言しなければならない点を除いて、非 64 ビットルーチンと同じです。system : システムコマンドの実行
string CHARACTER*n 入力 実行するコマンドを含む文字列戻り値 INTEGER*4 出力 実行されたシェルの終了状態。この値の説明についてはwait(2) を 参照
character*8 string / 'ls s*' /INTEGER*4 status, systemstatus = system( string )if ( status .ne. 0 ) stop 'system: エラー'end関数
systemは、あたかもコマンドとしてキー入力されたかのように、ユーザーのシェルに文字列 string を渡します。
注 - string の長さは 1,024 文字を超えることができません。
systemが環境変数SHELLを見つけた場合、Systemはコマンドインタプリタ (シェル) としてSHELLの値を使用し、それ以外はsh(l) を使用します。歴史的には、
ccとf77はそれぞれ異なった前提で発展してきました。
ccがsystemを呼び出す場合、シェルとして必ず Bourne シェルが呼び出されます。f77がsystemを呼び出す場合、どのシェルが呼び出されるかは環境変数SHELLにより決まります。
system関数は開いているファイルをすべてフラッシュします。参照 :
execve(2)、wait(2)、system(3)
sysytem()はマルチスレッド対応ではありません。マルチスレッドプログラム、または並列プログラムからは呼び出さないでください。time、ctime、ltime、gmtime : システム時間の取得
これらのルーチンは以下の関数を実行します。
ctimeシステム時間を ASCII 文字列に変換する ltimeシステム時間を現地時間の月、日などに分解する gmtimeシステム時間を GMT の月、日などに分解する time : システム時間の取得
time()には、標準バージョンと VMS バージョンの 2 つのバージョンがあります。f77のコマンド行オプション-lV77を指定した場合は VMS バージョンが呼び出され、それ以外の場合には標準バージョンが呼び出されます。(ライブラリルーチンのVMS バージョンは、f77では-lv77ライブラリオプションを指定すると使えますが、f95では使用できません。)
戻り値 INTEGER*4出力 0:0:0 GMT 1970/1/1 を起点とした秒数 INTEGER*8出力 64 ビット環境では、 timeはINTEGER*8の値を戻す。関数
time( )は、グリニッジ時間で 1970 年 1 月 1 日 00 時 00 分 00 秒からの時間を秒数で示す整数を返します。これはオペレーティングシステム時計の値です。例 :
time()−オペレーティングシステムに付属する標準バージョン
INTEGER*4 n, timen = time()write(*,*) '1970/1/1 0 時 GMT からの秒数 = ', nenddemo%f77 -silent ttime.fdemo%a.out1970/1/1 0 時 GMT からの秒数 = 913240205demo%
timeの VMS バージョンは、現在のシステム時間を文字列として取得するサブルーチンです。
t CHARACTER*8出力 hh:mm:ss 形式の時間 hh、mm、ss は 2 桁の数字
hh は時 mm は分 ss は秒例 :
time(t)、VMS バージョン、ctime−システム時間を ASCII に変換します。
character t*8call time( t )write(*, "(' 現在の時刻は、 ', A8 )") tenddemo%f77 -silent ttimeV.f -lV77demo%a.out現在の時刻は、 08:14:13demo%ctime : システム時間の文字への変換
関数
ctimeは、システム時間 stime を変換して、24 文字の ASCII 文字列として返します。
stime INTEGER*4入力 time ( )で読み取ったシステム時間
(標準バージョン)戻り値 CHARACTER*24出力 文字列に変換されたシステム時間。 ctimeと string はCHARACTER*24
として型宣言する以下に
ctimeが戻す値の書式を示します。詳細については、ctime(3C) のマニュアルページを参照してください。
character*24 ctime, stringINTEGER*4 n, timen = time()string = ctime( n )write(*,*) 'ctime: ', stringenddemo%f77 -silent tctime.fdemo%a.outctime: Wed Dec 9 13:50:05 1998demo%ltime : システム時間の月、日など (現地時間) への分解
このルーチンはシステム時間を現地時間の月、日などに分解します。
stime INTEGER*4入力 time()で読み取ったシステム時間
(標準バージョン)tarray INTEGER*4(9)出力 現地時間の日、月、年、... に分解された システム時間
tarrayの要素の意味については、次の「gmtime : システム時間の月、日など (GMT) への分解」を参照してください。
integer*4 stime, tarray(9), timestime = time()call ltime( stime, tarray )write(*,*) 'ltime: ', tarrayenddemo%f77 -silent tltime.fdemo%a.outltime: 25 49 10 12 7 91 1 223 1demo%gmtime : システム時間の月、日など (GMT) への分解
このルーチンはシステム時間を GMT の月、日などに分解します。
stime INTEGER*4入力 time()で読み取ったシステム時間
(標準バージョン)tarray INTEGER*4(9)出力 GMT の日、月、年、... に分解された
システム時間
integer*4 stime, tarray(9), timestime = time()call gmtime( stime, tarray )write(*,*) 'gmtime: ', tarrayenddemo%f77 -silent tgmtime.fdemo%a.outgmtime: 12 44 19 18 5 94 6 168 0demo%
ctime(3V) からのtarray()の値:以下は添字の値、単位、範囲を表しています
1 秒 (0 - 61) 2 分 (0 - 59) 3 時間 (0 - 23) 4 日 (1 - 31) 5 月 (0 - 11) 6 年 - 1900 7 曜日 (日曜日は 0) 8 年間通しの日数 (0 - 365) 9 夏時間、有効であれば 1
これらの値は C ライブラリルーチン
ctime(3C) で定義されており、59 秒を超える秒数をシステムが返す理由について説明します。ctime64、gmtime64、ltime64:64 ビット環境用の
システム時間のルーチンこれらは、ルーチン ctime、gmtime、ltime に対応したバージョンで、64 ビット環境との互換性を備えるために用意されたものです。ctime64、gmtime64、ltime64 は、入力変数 stime を
INTEGER*8にする必要があること以外は、ctime、gmtime、ltime と同じものです。このルーチンを、
INTEGER*8の stime とともに 32 ビット環境で使用した場合、stime の値がINTEGER*4の範囲を超えていると、ctime64 の戻り値はすべてアスタリスクになり、同時に gmtime と ltime の tarray 配列には -1 が充填されます。topen、tclose、tread、...、tstate :
テープ入出力(FORTRAN 77 のみ) これらのルーチンを使用すると、磁気テープを操作できます。
1 つの装置では、これらの関数を標準 Fortran 入出力と混在させて使用しないでください。
最初に
topen()を使用して、指定されたデバイスに対してテープ論理装置 tlu を開く必要があります。その後で、指定された tlu に関する他の操作をすべて行います。
tlu は通常の Fortran 論理装置とはまったく関係ありません。これらの関数は、使用する前に
INTEGER*4型宣言文で名前を宣言しておかなければならないので注意してください。topen : デバイスとテープ論理装置との結合
tlu INTEGER*4入力 0 〜 7 の範囲のテープ論理装置 devnam CHARACTER入力 デバイス名。例 : ' /dev/rst0'islabeled LOGICAL入力 真 = テープはラベル付き
注: ラベルはテープ上の最初のファイル戻り値 INTEGER*4出力 n=0: 正常 n<0: エラー
この関数はテープを駆動するものではありません。詳細については
perror(3f) を参照してください。例 :
topen()−1/4 インチのテープファイルを開きます。
topen ok: 0 1 /dev/rst0tclose : ファイル終了マークを書き込み、テープチャネルを閉じ、tlu を切り離す
tlu INTEGER*4入力0 〜 7 の範囲のテープ論理装置 n INTEGER*4戻り値n=0: 正常 n<0: エラー
注意 -![]()
tclose()は装置のポインタの現在位置の直後にファイル終了マークを置き、装置を閉じます。したがって、trewin()でテープを巻き戻してからtclose()を使用した場合、その装置の内容はすべて失われます。
例 :
tclose()−開いている 1/4 インチのテープファイルを閉じます。
tclose ok: 0 1 /dev/rst0twrite : 次の物理レコードのテープへの書き込み
tlu INTEGER*4入力 0 〜 7 の範囲のテープ論理装置 buffer CHARACTER入力 512 の倍数のサイズでなければならない n INTEGER*4戻り値 n>0: 正常。n は書き込まれたバイト数 n=0: テープの終わり n<0: エラー 例 :
twrite()−2 つのレコードからなるファイルを書き込みます。
twrite ok: 512 1 /dev/rst0tread : テープからの次の物理レコードの読み取り
tlu INTEGER*4入力 0 〜 7 の範囲のテープ論理装置 buffer CHARACTER入力 サイズは 512 の倍数で、読み取られる物理レコードの最大サイズが入るだけの大きさでなければならない n INTEGER*4戻り値 n>0: 正常。n は読み取られたバイト数 n<0: エラー n=0: ファイル終了マーク テープのポインタがファイル終了マークまたはテープ終了マークの位置にある場合、
treadは値を返しますが、テープの読み取りは行いません。例
: tread()− 前の例で書き込まれたファイルの最初のレコードを読み取ります。
tread ok: 512 1 /dev/rst0abcdtrewin : 最初のデータファイルの先頭へのテープの
巻き戻しこの関数は次のように呼び出します。
tlu INTEGER*4入力 0 〜 7 の範囲のテープ論理装置 n INTEGER*4戻り値 n=0: 正常 n<0: エラー テープにラベルが付けられている場合は、巻き戻し後にラベルはスキップされます。
例 1 :
trewin()−典型的な使用例 (該当部分のみ)
例 2 :
trewin()−2 つのレコードからなるファイルで 3 レコードの読み取りを試み、巻き戻して、1 レコードを読み取ります。
1 abcd2 wxyz3 wxyztrewin ok: 0 1 /dev/rst0abcdtskipf : ファイルとレコードのスキップ、ファイル
終了状態のリセットこの関数は次のように呼び出します。
tlu INTEGER*4入力 0 〜 7 の範囲のテープ論理装置 nf INTEGER*4入力 最初にスキップするファイル終了マークの数 nr INTEGER*4入力 ファイルスキップ後にスキップする物理レコード数 n INTEGER*4戻り値 n=0: 正常 n<0: エラー
tskipfは、まず最初に前方の nf 個のファイル終了マークをスキップし、次に前方の nr 個の物理レコードをスキップします。現在のファイルのポインタがファイル終了マークの位置にある場合、そのファイルもスキップするファイルの 1 個として数えられます。tskipfは、ファイル終了状態をリセットする効果もあります。次に説明するtstateと比較してください。
tskipf()の例: 典型的な使用例の該当部分のみを示します。4 個のファイルと 1 個のレコードをスキップします。
INTEGER*4 nfiles / 4 /, nrecords / 1 /, tskipf, tlu / 1 /...n = tskipf( tlu, nfiles, nrecords )IF ( n .LT. 0 ) STOP "tskipf: スキップできません"...tstate : テープ入出力チャネルの論理状態の読み取り
この関数は次のように呼び出します。
eoff が真である間は tlu からの読み取りはできません。
tskipf()を使用してファイル 1 とレコード 0 をスキップすることにより、このファイル終了状態フラグを偽に設定することができます。
n = tskipf( tlu, 1, 0).このようにすると、後続の正しいレコードを読み取ることができます。
テープの終わり (EOT) は空のファイルにより示され、しばしば二重の EOF マークとして表されます。EOT より後を読むことはできませんが、EOT より後に書くことはできます。
例 : 2 つのレコードからなるファイルを 3 つ書き込みます。
次の例は
、tstate()を使用して EOF をトラップしながら、すべてのファイルを書き込んでいます。例 : 前の例で書き込んだ 3 つのファイルのすべてのレコードを読み取るループの中で
tstate()を使用しています。
EOF と EOT についてまとめると以下のようになります。
- テープのポインタが EOF または EOT の位置にある場合
twrite()が成功すると、EOF と EOT 状態フラグを偽にリセットします。tclose()が成功すると、すべてのフラグを偽にリセットします。tclose()は次のようなデータの切り捨てを行います。
tclose()は装置のポインタの現在位置の直後に EOF マークを置き、装置を閉じます。したがって、trewin()でテープを巻き戻してからtclose()により装置を閉じた場合、内容はすべて失われます。tclose()のこの動作は Berkeley コードから引き継がれたものです。参照 :
ioctl(2)、mtio(4s)、perror(3f)、read(2)、st(4s)、write(2)ttynam、isatty : 端末ポートの名前の読み取り
ttynamとisattyは、端末ポート名に関する処理を行います。ttynam : 端末ポートの名前の読み取り
関数
ttynamは論理装置lunitに結合されている端末デバイスのパス名に空白を詰めて返します。
lunit INTEGER*4入力 論理装置 戻り値 CHARACTER*n出力 name が空白でない場合: name は lunit 上のデバイスのパス名 name が空の文字列 (すべて空白): lunit はディレクトリ /devの中の端末デバイスと結合されていないisatty : 装置が端末であるかどうかの確認
lunit INTEGER*4入力 論理装置 戻り値 LOGICAL出力 terminal = 真: 端末デバイスである terminal = 偽: 端末デバイスではない 例 : lunit が tty であるかどうかを確認します。
character*12 name, ttynamINTEGER*4 lunit /5/logical isatty, terminalterminal = isatty( lunit )name = ttynam( lunit )write(*,*) '端末 = ', terminal, ', 名前 = "', name, '"'end
端末 = T, 名前 = "/dev/ttyp1 "unlink : ファイルの削除
patnam CHARACTER*n入力 ファイル名 戻り値 INTEGER*4出力 n=0: 正常 n>0: エラー 関数
unlinkは、パス名 patnam で指定されたファイルを削除します。これがこのファイルに対する最後のリンクである場合、ファイルの内容はすべて失われます。
例 :
unlink()−tunlink.dataファイルを削除します。
call unlink( 'tunlink.data' )enddemo%f77 -silent tunlink.fdemo%ls tunl*tunlink.f tunlink.datademo%a.outdemo%ls tunl*tunlink.fdemo%参照 :
unlink(2)、link(3F)、perror(3F)
注 - パス名を<sys/param.h>で定義されているMAXPATHLENより長くすることはできません。
wait : プロセス終了の待機
status INTEGER*4出力 子プロセスの終了状態 戻り値 INTEGER*4出力 n>0: 子プロセスのプロセス識別子 n<0: n は (システムエラーコード) wait(2) を参照
waitは、シグナルを受信するか、またはその子プロセスの 1 つが終了するまで呼び出し元のプロセスを保留にします。最後のwaitが呼び出された後で、子プロセスのどれかが終了した場合、waitはただちに戻ります。子プロセスがない場合、waitはエラーコードを伴ってただちに戻ります。
INTEGER*4 n, status, wait...n = wait( status )if ( n .lt. 0 ) stop 'wait: エラー'...end
|
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |