隨着exec
調用類的,您所指定的程序名和程序可執行分開,所以你可以將其設置爲null,則。
但是這個引用實際上是來自ISO標準(可能是釋義),並且該標準覆蓋了從最小的微控制器到最新的z10企業級大型機的大量執行環境。
許多這些嵌入式系統將處於可執行名稱毫無意義的情況。
從最新的C1X草案:
的argc
值應爲正數。
值argv[argc]
應爲空指針。
如果argc
值大於零,陣列成員argv[0]
通過argv[argc-1]
包容應包含指向字符串,其通過現有主機環境給定實現所定義的值來編程啓動。
這意味着,如果argc
爲零(也可以是),則argv [0]爲NULL。
但是,即使argc
是不 0,你可能無法獲得程序的名稱,因爲標準還規定:
如果argc
的值大於零,則指向的字符串argv[0]
代表程序名稱;如果程序名稱在主機環境中不可用,則argv[0][0]
應爲空字符。如果argc
的值大於1,則由argv[1]
到argv[argc-1]
指向的字符串表示程序參數。
因此,在標準下沒有要求提供程序名稱的要求。我已經看過程序對此值使用多種選項:
- 根本沒有值(對於假定的安全性)。
- 一個公然的謊言(例如
sleep
惡意代碼段)。
- 實際的程序名(例如
sleep
)。
- 稍微修改一個(例如登錄shell的
-ksh
)。
- 描述性名稱(例如,
progname - a program for something
)。
@ShaunHamman目前的共識是關閉「質量」:http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-ven-though-its-much因爲「質量」是不可衡量的,所以我只是通過點贊。 ;-)可能歸結爲哪個問題在標題上碰到了最好的newb Google關鍵詞。 – 2017-02-17 20:20:42