|
|
|
| 2008/10/07 11:48||▲
|
|
|
多くの処理系では、system関数を使うと子プロセスを呼び出すことができるので、system関数は子プロセスを呼び出すための関数だと勘違いされている方も多いようです。実際には、system関数はコマンドプロセッサを呼び出すためのものです。
コマンドプロセッサというのは、普通はシェルと呼ばれることが多いと思います。Unixではshですし、Windowsではcommand.comやcmd.exeがこれに当たります。今回の実行環境では、コマンドプロセッサに相当するものは存在しません。
system関数の引数にNULLを渡すと、コマンドプロセッサを利用できるかどうかを調べることができます。非0が返ると使用可、0が返ると使用不可です。そして、引数にNULL以外を渡すと、処理系定義の値が返ってきます。多くの場合、ここで子プロセスの終了コードが返ってくるわけです。
今回の実装では、面倒なので、system関数は常に0を返すことにしてもよいのですが、誤使用に備えて、NULLを渡したときには0を、NULL以外を渡したときはEXIT_FAILUREを返すようにします。
#include <stdlib.h>
int system(const char *s) { return s == NULL ? 0 : EXIT_FAILURE; }
この関数も、規格の要求を満たすためだけのものですが、コマンドプロセッサを自作する場合には、実際にそれを呼び出すようにしてもよいでしょう。
|
| 2006/06/02 10:55|一般ユーティリティ|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/65-9b1bf848
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|