私はプロセスとスレッド管理の初心者です。私のシェルは、PATH
環境変数を理解する必要があります。設定および変更が可能です。これは2つの方法で動作します - 対話式&バッチモード。シェルはls; ps; wcファイル; calのような複数のジョブを取ることができます。私は手を信号で汚いものにしたい。だから私は^ K、^ cも扱うべきです。私は自分の基本的なUNIXシェルをC言語でどうやって実装できますか?
私はexec、フォーク、パイプを使用する必要がありますが、始めることはできません。
私はプロセスとスレッド管理の初心者です。私のシェルは、PATH
環境変数を理解する必要があります。設定および変更が可能です。これは2つの方法で動作します - 対話式&バッチモード。シェルはls; ps; wcファイル; calのような複数のジョブを取ることができます。私は手を信号で汚いものにしたい。だから私は^ K、^ cも扱うべきです。私は自分の基本的なUNIXシェルをC言語でどうやって実装できますか?
私はexec、フォーク、パイプを使用する必要がありますが、始めることはできません。
すべてのUNIXシェルはオープンソースなので、コードを読むのが良いかもしれません。
件名に関する良いスターター記事をお探しの場合は、Linux GazetteからWriting Your Own Shellをお試しください。
もう一つの良い出発点は、ちょうどあなたの頭を丸くするために、その1つがmini-shellというソースコードを見ていることです。
あなたのメインループである:
fgets(3)
readline(3)
を使用)コマンドを解析するには、2つの一般的な選択肢があります。再帰的な降下構文解析プログラムを作成するか、yacc(1)
を使用して生成します。 yacc
を使って最初のパーサーを起動するのはずっと簡単ですが、完全にそれをデバッグすることができますし、本当にコンテキストフリーになりたいです。私は再帰的な降下を好むが、世界中の誰もがyaccを使うほうが好む。 (技術的には、bison
。)シェルが宿題のように本当にシンプルなのなら、yaccは過剰なものかもしれません。
字句解析を行うには、独自のロールを使用するか、フレックスを使用することもできます。
スレッドを使用する必要はありません。
いずれにしても 'readline()'を使用することをお勧めします。シェルを使用しなければならない限り、あなたの人生は無限に楽になります。しかし、yacc/bisonでうごめくための+1。良いツールですが、単純化するのは難しい作業です。 –
yoyurシェルからプログラムを実行したいのであれば、パーサとレクサーは必要ありません。しかし、 "他の"ものをしたいのであれば、flex + yaccを使うことをお勧めします。* doあなた自身をロールアップしない* – aviraldg
それを取得しています。しかし、私は手を信号で汚くしたい。だから私は^ K、^ cも扱うべきです。 –
メインシステムコールを記述するUnixの書籍の多くには、さまざまな呼び出しを使用する方法と理由を示すシェルも実装されています。スティーブンスとRochkindは、2冊のそのような本です。
Wリチャード・スティーブンス、スティーブン・A Rago Advanced Programming in the Unix Environment, 3rd Edn
マルク・J Rochkind Advanced Unix Programming, 2nd Edn
これは宿題の質問ですか?そうなら、適切にタグを付ける必要があります。 – Amok
いいえそうではありません! –