char *args[41];
char str[41], teststr[41];
const char delimiter[2]=" ";
memcpy(teststr, str, sizeof(str));
args[i]=strtok(teststr, delimiter);
while(args[i]!=NULL)
{
printf("args[%d]=%s\n", i, args[i]);
i++;
args[i]=strtok(NULL, delimiter);
}
這是我用來初始化args []的代碼。execvp()系統調用不執行
下面的代碼是執行execvp()系統調用。
pid=fork();
if(pid==0)
{
execvp(args[0], args);
}
當我運行代碼時,execvp運行幾個命令。比如當我嘗試執行'ls'命令時,它會工作,但是當我嘗試運行'date'命令或'cd'命令時,它不起作用。當我嘗試執行'cat'命令時,提示不會顯示任何內容,同時也不會顯示出來。
'cd'永遠不會與'exec'和朋友一起工作,因爲這個命令是由於進程無法更改其父進程的工作目錄而被內置到shell中的。 'date'也可能是這種情況,但'cat'應該可以正常工作。顯然,在你實際顯示的代碼中,'str'永遠不會被實際填充或初始化,所以這根本不應該工作。你也應該使用'strcpy()'來填充'args'(這意味着改變'args'的定義來分配內存),而不是存儲指向'strtok()'要修改的字符串的指針。 –
行,但事情是,在貓的情況下,我給命令myshell> cat shell.c其中myshell是我正在創建一個shell。當我運行這個命令時,它會進入子進程但永遠不會出現,也不會顯示輸出。 – Malhar
'''是用於shell重定向的,如果你試圖將它作爲命令行參數傳遞,它顯然不起作用。 –