2010-03-02 68 views

回答

12

argv[0]應該是程序名稱。它傳遞給程序的main函數。某些程序根據字符串argv[0]的不同來區分它們的行爲。例如,如果使用的不是sh稱爲bash的GNU bash外殼將禁用它的一些特性。最好給與它通過path相同的價值。

在linux下,argv[0]是由top實用程序(它有可能從閱讀條目獲取/proc/

+0

如果argv [0]前面有一個破折號,如''-sh''或''-ksh'',則大多數shell將運行該概要文件。這也適用於僞裝成'sh'和'bash'。登錄過程如何請求shell來運行配置文件。 – 2010-03-02 16:15:57

5

argv [0]應該是要運行的命令的完整路徑。

+1

沒有義務爲它是完整的路徑;的確,這個價值並不一定與可執行文件的名字有關。如果是的話,這很方便,但絕對不能依賴它作爲完整的路徑名。 – 2010-03-02 16:17:08

2

我知道,這是不是你要找的答案,但有沒有具體顯示的進程名你爲什麼這樣做?我想問的原因是,大多數如果不是所有的人的行動通常與任何system()execv()在Windows或Unix的庫可用,更安全,更快捷,更不可能從間接錯誤遭受運行。我的意思是,例如,當PATH更改並突然您的代碼停止工作。

如果你正在傳遞一個字符串,無論是全部或部分,並運行它,那麼你也會把自己暴露給通過輸入命令,可能會損害獲得訪問系統的用戶。例如。想象你已經實現了使用find /home -name文件搜索和您的用戶類型:

"%" -exec rm {} \; 

哎喲!

+0

這是一個家庭作業,我必須創建我自己的簡單外殼,並且我被要求使用evecv(); – 2010-03-02 23:26:41

+0

採取了點。這可能不是家庭作業最好的主題。據推測,你的導師在某個時候會涵蓋防禦性編程?如果不是,也許你可以/應該建議他/她這樣做?無論如何,祝你好運 - 我希望他們在我上大學的時候可以使用計算器! – 2010-03-03 22:37:08