2010-07-06 61 views

回答

6

「以C/C++(bash中,太?)的第一個命令行參數,argv的[0],是二進制文件名」

是完全錯誤的,順便。 ISO標準沒有規定這樣的事情。

來自C99:

如果的argc的值是大於零,則該字符串通過的argv指向[0]表示程序名;如果程序名稱在主機環境中不可用,則argv [0] [0]應爲空字符。

,請注意,聲明「表示程序名」,而不是「是二進制可執行文件的位置」。這是因爲有一個較早的片斷其中規定:

...陣列成員的argv [0]通過的argv [ARGC-1]包括應包含指向字符串的指針,由主機環境定實現定義的值編程啓動之前。」

這是您的argv[0]的命令完全合法的‘睡眠60’是‘PAX夢幻般的睡眠工具’,而不是‘/ bin中/休眠’。

總之,環境不需要提供程序的表示,即使它有,它也沒有o是可用於查找二進制文件的任何東西。


但是,已經厭倦你用我的謾罵,Perl提供$0$PROGRAM_NAME(在那個可惡的「英語」模式),用於這一目的。詳情請參閱perlvar

+0

好的,很好。我想我不是在尋找完美的可移植性。順便說一句,POSIX是否會說argv [0]包含的內容? – 2010-07-06 23:29:21

+0

我不應該將這種argv行爲與C或任何高級語言聯繫起來。以下是POSIX.1所說的: http://www.opengroup.org/onlinepubs/009695399/functions/exec.html 參數argv是一個由空字符結尾的字符串指針組成的數組。應用程序應確保該數組的最後一個成員是空指針。這些字符串應構成新過程映像可用的參數列表。 argv [0]中的值應該指向與其中一個exec函數啓動的進程關聯的文件名。 – 2010-07-06 23:39:11

7

$0包含包含正在執行的perl腳本的文件的名稱。

相關問題