ファイヤープロジェクト
関数system
2003-07-20T15:13+09:00   matsu
関数systemによる,もっとも簡単なプロセスからプロセスを生む方法.
systemはプロセスの中からshell経由でコマンドを実行する.すなわち
sh -c コマンド
である.通常のコマンドラインに入力するのと同じ文字列を引数に指定する.だからワイルドカードなども使用できる.その代わりshell起動のオーバーヘッドがかかる.返り値は以下の通り.
127
shを起動できなかった
-1
その他のエラー
その他の値
コマンド実行の返り値
まずスクリプトhoge.shを作成してみる.
#!/bin/sh

case $1 in
    1)
    exit 1;
    ;;
    2)
    exit 2;
    ;;
    3)
    exit 3;
    ;;
    default)
    exit 0;
    ;;
esac
そしてこれをsystem関数で呼んでみる.
実行するとresultの値が期待したものとは異なっていた.
execute command "hoge.sh"
sh: hoge.sh: command not found
result = 32512
execute command "./hoge.sh"
result = 0
execute command "./hoge.sh 1"
result = 256
execute command "./hoge.sh 2"
result = 512
execute command "./hoge.sh 3"
result = 768
コマンドから返されるステータスはwait関数で定義されているフォーマットで返るらしくって,それはWEXITSTATUS(status)で取得できるらしい.つまり先に示した返り値がwait関数のフォーマットになって返って来る.が,WEIXTSTATUSを使用するとリンクでエラーが返される.定義されていないと言われる(stdlib.hで定義されているように見えるのだが......).
matsu(C)
Since 2002
Mail to matsu