したがって、協会、NULLポインタで引数リストを終了する必要があります。これは次のように表されます。
パラメータリストはNULLポインタで終わる必要があります。
私の質問はなぜNULLポインタでパラメータリストを終了するのですか?パラメータリストの終わりを知りたいので使用してください。これはcharへのポインタ配列ですか?
答え1
ヌルポインタで引数リストを終了するのはなぜですか?パラメータリストの終わりを知りたいので使用してください。これはcharへのポインタ配列ですか?
はい。環境変数配列の場合も同様です。カーネルは呼び出しプロセスによってコピーされるデータの量を知る必要があり、システム呼び出しはこれらの配列内の要素数の明示的なパラメータを提供しません。 (もちろん明示的なパラメータとして渡すことも可能です。)
答え2
したがって、まずexec()
システムコールはありません。exec()
一連の関連APIを参照するために使用されるシンボル。execve()
システムコールそしてグループライブラリ機能このシステムコールの上に。ライブラリ関数はしばしば便利な小さなAPIバリアントを提供します。
一部~のライブラリ機能l
--- の付いた関数名は可変パラメータ関数です。リストとして実行されるプログラムのコマンドライン引数を指定できます(普段着長さ)関数呼び出しで。リストの末尾にあるヌルポインタを使用すると、関数はリストの終わりがどこにあるかを確認できます。 (これらのパラメータが保存される場所は実装によって異なります。次を参照してください。関数のva_argパラメータはスタックメモリまたはヒープメモリに保存されていますか?)
ライブラリ関数は内部的にargv
正しいサイズの配列を割り当て、配列を文字列へのポインタで埋めます(そして配列NULL
の最後の要素としてaを追加しますargv
)。その後、設定の内容が(最終的に)argv
呼び出しに渡されますexecve()
。