INTEGER*4 system status = system( string ) |
|||
string |
character*n |
入力 |
実行するコマンドを含んだ文字列 |
戻り値 |
INTEGER*4 |
出力 |
実行されたシェルの終了状態。この値の説明については wait(2) を参照。 |
例: system():
character*8 string / ’ls s*’ / INTEGER*4 status, system status = system( string ) if ( status .ne. 0 ) stop ’system: error’ end |
関数 system は、あたかもコマンドとしてキー入力されたかのように、ユーザーのシェルに文字列 string を渡します。注意: string の長さは 1,024 文字を超えることができません。
system が環境変数 SHELL を見つけた場合、system はコマンドインタプリタ (シェル) として SHELL の値を使用し、それ以外は sh(1) を使用します。
現プロセスはコマンドが終了するまで待機します。
従来、cc の開発は違う想定で行われています。
cc が system を呼び出す場合、シェルは通常、Bourne シェルです。
system 関数は開いているファイルをすべてフラッシュします。
出力ファイルの場合は、バッファーは実ファイルにフラッシュされます。
入力ファイルの場合は、ポインタの位置が予測不能になります。
関数 sh(3f) と system(3f) は引数の文字列を実行用のシェルへ渡します。引数の文字列を Fortran 文字の値から C 文字列の値に変換し、それを C ルーチン system(3c) へ渡します。ルーチン sh(3f) と system(3f) との相違点は、system は C ルーチン system を呼び出す前に Fortran 入出力バッファーをフラッシュするのに対し、sh はこれを行いません。バッファーのフラッシュにはかなり時間がかかるため、Fortran 出力が呼び出し結果と無関係な場合は、ルーチン system より、ルーチン sh を選択してください。
参照: execve(2)、wait(2)、system(3)
system() はマルチスレッド対応ではありません。マルチスレッドプログラム、または並列プログラムからは呼び出さないでください。