私はプロセスとスレッド管理の初心者です。私のシェルはPATH
環境変数を理解する必要があります。設定・変更可能です。インタラクティブ モードとバッチ モードの 2 つの方法で実行されます。シェルは、ls;ps;wc file;cal のように複数のジョブを実行できます。信号も手を汚したい。したがって、 ^K 、 ^c も処理する必要があります。
exec、フォーク、パイプを使用する必要があることはわかっていますが、始めることはできません。
私はプロセスとスレッド管理の初心者です。私のシェルはPATH
環境変数を理解する必要があります。設定・変更可能です。インタラクティブ モードとバッチ モードの 2 つの方法で実行されます。シェルは、ls;ps;wc file;cal のように複数のジョブを実行できます。信号も手を汚したい。したがって、 ^K 、 ^c も処理する必要があります。
exec、フォーク、パイプを使用する必要があることはわかっていますが、始めることはできません。
すべての UNIX シェルはオープンソースであるため、コードを読むことから始めるのがよいでしょう。
このテーマに関する優れたスターター記事を探している場合は、Linux Gazette のWrite Your Own Shellを試してみてください。
もう 1 つの良い出発点は、ミニ シェルのソース コードを調べることです。これは、ミニ シェルが最小のものの 1 つであるためです。
メインループは次のとおりです。
fgets(3)
単純なシェル、readline(3)
派手なシェルに使用)コマンドを解析するには、2つの一般的な選択肢があります。再帰下降パーサーを作成するか、を使用yacc(1)
して生成します。を使用して最初のパーサーを叩き出すのははるかに簡単yacc
ですが、それをデバッグするのに完全に行き詰まる可能性があり、それは本当に文脈自由でありたいと思っています。私は再帰下降を好みますが、世界中のほぼすべての人がyaccの使用を好みます。(技術的にはbison
。)宿題のシェルのように、シェルが本当に単純な場合、yaccはやり過ぎかもしれません。
字句解析を行うには、独自にロールするか、フレックスを使用することもできます。
スレッドを使用する必要はありません。
メイン システム コールについて説明している Unix 書籍の多くは、さまざまなコールを使用する方法と理由を説明するシェルも実装しています。Stevens と Rochkind はそのような本です。
W Richard Stevens、Stephen A Rago Unix 環境での高度なプログラミング、第 3 版
Marc J Rochkind 上級 Unix プログラミング、第 2 版