index_html
exsh-3
1. コマンドをバックグラウンドで実行する機能を追加せよ.
具体的には,コマンドの最後に"&"を付けると,コマンドの実行を待たずに,次の入力を受け付けられるようにする.ただし,defunctプロセスの発生を避けるために,適切なタイミングでバックグラウンドジョブに対してwaitする必要がる.
実行例:
> sleep 3
とすると,次のプロンプトが出るまでに3秒かかるが,以下のように実行すると, すぐに次のプロンプトが表れる.
> sleep 3 &
>
2. cdコマンドを実現せよ.
教科書p.61にあるように,プロセスはworking directoryを状態の一部として持っている.cdは,working directoryを変更するshellの内部コマンドであり,/bin/pwd (print working directory)は現在のworking directoryを表示するコマンドである.
chdir()を用いてcdコマンドを実現せよ.
注意: 内部コマンドでない/bin/pwdが,現在のshellのworking directoryを正しく表示できる理由を説明せよ.
3. 発展.
- 終了した子プロセスの終了状態を表示する.以下のようにサブコマンド
の戻り値が正しく表示されるか確認すること.
> true &
Backgroud job 28116
> 改行入力
Terminated process 28116 with return code 0.
> false &
Backgroud job 28117
> 改行入力
Terminated process 28117 with return code 1. - 将来の拡張を考慮し,オプション解析にgetopt()を用いる.
- gets()にはセキュリティ上の問題がある.どのような問題か調べて対処せよ.