23

私はプロセスとスレッド管理の初心者です。私のシェルはPATH環境変数を理解する必要があります。設定・変更可能です。インタラクティブ モードとバッチ モードの 2 つの方法で実行されます。シェルは、ls;ps;wc file;cal のように複数のジョブを実行できます。信号も手を汚したい。したがって、 ^K 、 ^c も処理する必要があります。

exec、フォーク、パイプを使用する必要があることはわかっていますが、始めることはできません。

4

3 に答える 3

14

すべての UNIX シェルはオープンソースであるため、コードを読むことから始めるのがよいでしょう。

このテーマに関する優れたスターター記事を探している場合は、Linux Gazette のWrite Your Own Shellを試してみてください。

もう 1 つの良い出発点は、ミニ シェルのソース コードを調べることです。これは、ミニ シェルが最小のものの 1 つであるためです。

于 2009-09-30T18:55:35.527 に答える
8

メインループは次のとおりです。

  • 行を読む(fgets(3)単純なシェル、readline(3)派手なシェルに使用)
  • コマンドを解析します
  • パイプラインをフォークして実行します

コマンドを解析するには、2つの一般的な選択肢があります。再帰下降パーサーを作成するか、を使用yacc(1)して生成します。を使用して最初のパーサーを叩き出すのははるかに簡単yaccですが、それをデバッグするのに完全に行き詰まる可能性があり、それは本当に文脈自由でありたいと思っています。私は再帰下降を好みますが、世界中のほぼすべての人がyaccの使用を好みます。(技術的にはbison。)宿題のシェルのように、シェルが本当に単純な場合、yaccはやり過ぎかもしれません。

字句解析を行うには、独自にロールするか、フレックスを使用することもできます。

スレッドを使用する必要はありません。

于 2009-09-30T19:03:09.187 に答える
4

メイン システム コールについて説明している Unix 書籍の多くは、さまざまなコールを使用する方法と理由を説明するシェルも実装しています。Stevens と Rochkind はそのような本です。

于 2009-09-30T22:52:08.270 に答える