2011年9月3日土曜日

mysystem 関数の実装 (fork,execlp)

system 関数と同等の機能を有する関数 (mysystem) を実装する例題です。

execlp(execvp,..) 関数は引数に実行するコマンドとその引数を指定すると、そのコマンドを実行してくれますが、実行後プログラムを終了してしまいます。
そこで、そのコマンドを実行後も処理を続行したい場合には、fork により子プロセスを作成し、その子プロセス内にて execlp 等を実行しています。
execlp 関数の終了後、子プロセスが終了しても親プロセスで続けて処理を行うことができます。

また、execlp 関数では、通常のシェルで行うようなパイプやリダイレクション処理 ( | < > etc.) や正規表現 (? * etc.) による複雑な処理を行うことができません。
複雑な処理を行う場合にはシェルコマンド (/bin/sh etc.) を介してコマンドを実行します。

ex.

execlp("/bin/sh","/bin/sh","-c","ls | wc > output.txt",NULL);

実行結果

0 件のコメント:

コメントを投稿