パーソナルツール
現在の場所: ホーム オペレーティングシステム論 演習 2006年度 第1回
文書操作

index_html

作成者 管理者 最終変更日時 2007年05月01日 10時31分

shell を作ってみよう(ver.1).

exsh-1

以下の順序で exsh-1 (Exercise shell ver.1) を作成し、実行結果を記録せよ.

1. execlp() によるサブコマンドの起動.

  1. サブコマンド "ls" を execlp() により起動する.
  2. Makefileを作成する. 
  3. Makefile に不要なファイルと生成物を削除するためのエントリ clean を追加する.
  4. コマンド名を標準入力から入力できるようにする. echo, date, ls, pwd の実行を確認すること. 
  5. プロンプト "> " を出力する.
  6. コマンドの起動に失敗した場合に perror() を用いてメッセージを出力する.

2. fork()を用いた,サブコマンドの繰り返し起動.

  1. プロンプトの出力,コマンド入力,コマンドの起動を永久に繰り返すようにする. fork() を用いてサブプロセスを生成し,execlp() によってコマンドを起動すること.
  2. debug write 用オプション "-d" を用意し,デバッグ情報を出力する. fork() の戻り値などを出力すること.

3. 発展.

  1. "exit" を入力することにより終了する機能を追加する.
  2. 空入力では何もせず,次のプロンプトを出力すること.
  3. 以下のように起動した場合どのような問題が起きるか? 問題が起きた場合は feof()を用いて対処せよ.
    % echo ls | ./exsh-1
  4. 上記のように起動した場合,一般のシェルでは,プロンプトを出さずに終了す る.isatty() を用いてこれを実現せよ.

4. 解答例.

  1. exsh-1.c
    ダウンロード
  2. Makefile
    ダウンロード