Sun Studio 12: Fortran ライブラリ・リファレンス

1.4.50 system: システムコマンドの実行

関数は、次のように呼び出します。

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 の開発は違う想定で行われています。

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() はマルチスレッド対応ではありません。マルチスレッドプログラム、または並列プログラムからは呼び出さないでください。