C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

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:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/65-9b1bf848

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.