学校の課題「自分でシェルを作る」Part1
学校のオペレーティングシステムの課題にこんなのが。
簡易シェルプログラムを作ってみよう。 シェルの実現方法 while(TRUE){ print_prompt(); /* 入力を促す文字列を表示 */ read_command_line; /* コマンドを入力する */ pid = fork(); /* 子プロセスを生成 */ if(pid == 0){ /* 子プロセスの処理 */ /* 入力されたコマンド */ execlp(command, command, (arg1, arg2,) NULL); } else{ /* 親プロセスの処理 */ wait(); /* 子プロセスの終了を待つ */ } }
ちょっと、つっこんでやってみよう。長くなりそう…。
- print_prompt ">"とか出力すればいいでしょう
- read_command_line これが簡単そうに見えて手強そう
- fork システムコール、Linuxシステムプログラミングは去年、「ふつりな」読んだきりなので復習しよう
- execlp システムコール、下にまとめる
使うexec系のシステムコールはexeclpか…
ということは、シェルに「echo hoge」とか打ち込んだら
execlp("echo", "echo", "hoge", NULL);
としなければいけないわけで
もし、「grep foo.c hoge」とか打ち込んだら
execlp("grep", "grep", "foo.c", "hoge", NULL);
としなければいけない
あらかじめ、実行したいコマンドの引数がはっきりしているなら、execlpでもいいんだけど上の疑似コードを見た感じでは、execlpよりも引数を配列で渡すことができるexecvpを使うべきではないだろうか。だれかいい考えがあったら教えてください。
今回はPart1ということにしました。後日、復習がてら色々なことを考えながらやっていこうと思います。
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/07/27
- メディア: 単行本
- 購入: 31人 クリック: 366回
- この商品を含むブログ (137件) を見る
というか、やっぱり「ふつパイラ」買おうかな・・・