2014-10-31 47 views
0

cd命令文件路徑和哪個環境變量?! 我使用PATH環境變量,但我卻不能從中找到cd命令,所以我想執行的execv cd命令,預先感謝您,我的代碼:如何在linux中使用execv()和cd命令?

char * envVariable = get env("PATH"); 
execv(path, args); 
+5

執行'cd'是毫無意義的。你會發射一個外殼,改變外殼中的目標,退出外殼 - 將所有其他部分完全保持原樣。 – 2014-10-31 14:42:42

+0

這是我的操作系統實驗室任務所必需的......我不知道該怎麼做! – 2014-10-31 14:43:51

+4

'cd'是內置的外殼,並且不是*命令。你可以使用'chdir()'來改變目錄。 – 2014-10-31 14:45:00

回答

0

如果您正在編寫一個殼 - 或類似的東西,你是要求cd內建調用chdir(2)系統調用。

當您更改進程私有的任何屬性時,這是必需的。當前目錄是這樣的屬性(等都是由setrlimit(2)設置限制,等...)

這就解釋了爲什麼你不能這樣做system("cd /tmp");system功能派生一個/bin/sh -c過程,而且外殼是不斷變化的目錄,而不是父進程(你的程序)。

閱讀fork(2)execve(2)Advanced Linux Programming

+0

然後,我將停止命令輸入,並且必須搜索當前路徑中命令的參數(需要的目錄)等。 – 2014-10-31 14:48:26

+0

如果用「當前路徑」表示'$ PATH'的當前值,那就沒有關係。 'cd'命令以其通常的形式將它的參數傳遞給'chdir()'(儘管它可能會識別一些特殊的情況,例如cd-to切換到前一個目錄)。 – 2014-10-31 14:52:06