呼び出しのexec
クラスでは、プログラム名とプログラム実行可能ファイルを別々に指定して、NULLに設定できるようにします。
しかし、その引用は実際にはISO標準(言い換えられる可能性があります)からのものであり、その標準は、最小のマイクロコントローラーから最新のz10Enterpriseクラスのメインフレームまでの非常に広範囲の実行環境をカバーしています。
これらの組み込みシステムの多くは、実行可能ファイルの名前がほとんど意味をなさない状況にあります。
最新のc1xドラフトから:
の値はargc
非負でなければなりません。
値argv[argc]
はnullポインタでなければなりません。
の値がargc
ゼロより大きい場合、配列メンバーargv[0]
にargv[argc-1]
は文字列へのポインタが含まれている必要があります。文字列には、プログラムの起動前にホスト環境によって実装定義の値が与えられます。
これは、argc
がゼロの場合(そしてそれが可能である場合)、argv[0]がNULLであることを意味します。
ただし、が0でない場合でもargc
、標準には次のように記載されているため、プログラム名を取得できない場合があります。
の値がargc
ゼロより大きい場合、が指す文字列argv[0]
はプログラム名を表します。argv[0][0]
プログラム名がホスト環境から利用できない場合は、ヌル文字になります。の値がargc
1より大きい場合、argv[1]
throughが指す文字列argv[argc-1]
はプログラムパラメータを表します。
したがって、標準ではプログラム名を指定する必要はありません。私は、プログラムがこの値に対して幅広いオプションを使用しているのを見てきました。
- まったく値がありません(想定されるセキュリティのため)。
- 露骨な嘘(
sleep
悪意のあるコードなど)。
- 実際のプログラム名(など
sleep
)。
- わずかに変更されたもの(
-ksh
ログインシェルなど)。
- わかりやすい名前(例:)
progname - a program for something
。