0

私の理解では、Windows では、コマンド ライン パラメーターはプロセス環境ブロックに保存されます。

1) Unix ライクなシステムではどのように保存されますか?

2) どの形式/構造で保存されていますか? この概念には共通/一般名がありますか?

ほとんどの言語では、コマンド ライン引数は配列のようなもので既に利用可能です。

3) それらを解析するのはいつですか?

(たとえば、Windows 上の C プログラムの場合。他の言語やプラットフォームも歓迎されます。)

4) PEB 内のデータは、「配列」内のデータとどのように関連していますか?

5) コマンド ライン引数に対して有効な制約 (たとえば、最大サイズ、ro など) は何か、これは何に依存しているか、この情報は何に格納されており、どのように (何によって) 有効になっているのか?

6) Bash のようなシェル (readline を使用) は、人間のユーザーがより便利な方法で引数を入力できるようにする以上のことを意図していますか? すなわち。シェルは通常、コマンドライン引数の処理においてより「アクティブな」役割を持っていますか?

7) パイプ (コマンド ライン内) はコマンド ライン引数にどのように関連していますか?

8) これに関して言及する価値のある他の情報はありますか?

(もちろん、質問に誤った仮定が含まれている場合や正しくない場合は、修正してください。)

4

1 に答える 1

2

1) それらは、カーネルによって準備されたスタックに格納されます。

2) カーネルにコピーがあり、ユーザー空間のスタックにコピーがあります。ユーザー空間では、すべてヌルで終了する文字列を指すポインタの単純な配列です。これ以上簡単なことはありません。カーネルのコピーは情報提供を目的としています。つまり、/proc で使用されます。長すぎる場合は切り捨てられます (これについてはよくわかりません)。

3) シェルにコマンドを入力すると、シェルはそれを解析します。を呼び出すとsystem()、libc がそれを解析します。execve を呼び出すときは、呼び出す前に解析しました。いずれにせよ、カーネルはそれを解析しません。

5) スタックのサイズによって制限されます。ulimit -a

7) パイプとリダイレクトはコマンドライン引数の一部ではありません。パーサーはこれを処理します。

于 2012-11-01T06:44:05.367 に答える