本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > s

system(3S)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

system() ― シェルコマンドの発行

構文

#include <stdlib.h>

int system(const char *command);

説明

system() は、 command の指す文字列で指定されるコマンドを実行します。 実行されるコマンドの環境は、 fork() を使って子プロセスを作ります fork(2) 参照)。その子プロセスは、以下のような execl() コールによって exec(2) 参照) sh-posix(1) ユーティリティを実行したときと同様になります。

execl("/usr/bin/sh", "sh", "-c", command, 0); 

system() はコマンドの終了を待っている間、 SIGINTSIGQUIT シグナルを無視し、 SIGCHLD シグナルをブロックします。 これによりアプリケーションを終了させようとするシグナルを見逃してしまうおそれがあるときは、 system() からの戻り値を調べます。コマンドがシグナルの受信により終了した場合にはアプリケーションにとって適当な動作を行うようにしてください。

system() は、それ自体が作るプロセスを除いて、呼び出したプロセスの子プロセスの終了ステータスに影響を及ぼしません。

system() は、子プロセスが終了するまで戻りません。

アプリケーション使用法

system() の戻り値が -1 でない場合、その値は <sys/wait.h> 中のマクロによって解読できます。 また、このマクロは <stdlib.h> 中にもあるため便利です。

system() は子プロセスの終了を待っている間、 SIGINTSIGQUIT を無視し SIGCHLD をブロックするので、実行されるコマンドでのシグナルの取扱いは、 fork(2)exec(2) に記されているとおりになります。 たとえば SIGINT シグナルが、受信されるべきシグナルとして設定されているか、あるいは SIG_DFL として設定されている場合、 system() が呼び出されると、子プロセスはその SIGINT の取扱いを SIG_DFL に設定して起動します。

親プロセス中で SIGINTSIGQUIT を無視すると、実行されるコマンドがこのいずれかのシグナルを無視あるいは受信したときの、対等関係の問題 (たとえば同一のターミナルから 2 つのプロセスが読み取られるなど) が防げます。

戻り値

command が null の場合、 system() は 0 でない値を返します。

command が null でない場合、 system() はコマンド言語インタプリタの終了ステータスを wait(2) で規定される形式で返します。 コマンド言語インタプリタの終了ステータスは、 sh-posix(1) に対して規定されているものとほぼ同様です。ただし、子プロセスを作成した後にエラーによりコマンド言語インタプリタが実行できなかったときの system() からの戻り値は、 _exit(127) を使ってインタプリタを終了したときと同様 になります。 子プロセスが作成できないとき、あるいはコマンド言語インタプリタの終了ステータスが得られないとき、 system() は -1 を返しそのエラーを示す errno を設定します。

診断

system() は、 string を実行するために、 /usr/bin/shexec() する子プロセスを fork します。 fork が失敗した場合、 system() は -1 を返し errno を設定します。 exec が失敗した場合、子プロセスは exit(127) を呼び出して終了しますが、 system() は、 その子プロセスの終了を待っていた関数 waitpid() wait(2) 参照) から返ってくるステータス値 を呼び出し元プロセスに返します。

エラー

エラーが発生すると、 system()fork(2) に記述されている値を errno に設定します。

ファイル

/usr/bin/sh

標準準拠

system(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, POSIX.2, ANSI C

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.