我試圖編寫一個基本的外殼,可以解釋簡單的命令,如日期,LS在語言C。沒有這樣的文件或目錄時使用execv()
我首先得到這樣的PATH變量,以便稍後將它傳遞給execv()函數。
const char *name = "PATH";
char *value;
value = getenv(name)
,我打印出來的價值,我得到這個:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
請注意,我用virutalbox運行Ubuntu Linux系統。這是我用來嘗試一個簡單的ls命令的代碼。在變線下面的代碼是用戶寫了實際的命令,在我們的情況下,它是「LS」
pid_t pid, wpid;
int status;
pid = fork();
if (pid == 0) {
// Child process
if (execv(value, line) == -1) {
perror("lsh");
}
exit(EXIT_FAILURE);
}
else if (pid < 0) {
// Error forking
perror("lsh");
}
else {
// Parent process
do {
wpid = waitpid(pid, &status, WUNTRACED);
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
而結果我得到的是:
lsh: no such file or directory
什麼想法?
你確定它是'lsh'嗎? –
林不知道你的意思? @EugeneSh。 –
我的意思是,根據Wiki,你選擇運行一些「開源SSH協議實現項目」,這看起來很奇怪。 –