読者です 読者をやめる 読者になる 読者になる

kitak.blog

Kみたいなエンジニアになりたいブログ

学校の課題「自分でシェルを作る」Part1

Linux

学校のオペレーティングシステムの課題にこんなのが。

簡易シェルプログラムを作ってみよう。
シェルの実現方法
while(TRUE){
     print_prompt();      /* 入力を促す文字列を表示 */
     read_command_line;   /* コマンドを入力する */
     
     pid = fork();        /* 子プロセスを生成 */

     if(pid == 0){        /* 子プロセスの処理 */
         /* 入力されたコマンド */
         execlp(command, command, (arg1, arg2,) NULL); 
     }
     else{                /* 親プロセスの処理 */
         wait();          /* 子プロセスの終了を待つ */
     }
}

ちょっと、つっこんでやってみよう。長くなりそう…。

使う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プログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

というか、やっぱり「ふつパイラ」買おうかな・・・