因此,這裏是我的代碼,竟然放棄了我的問題位:與execvp()有問題
void childProcessHandler(string command){
int argCounter = 0;
for(int i=0; i!=command.size(); i++)
argCounter+=(command.at(i) == ' ');
char * temp, *token;
char *childArgs[argCounter];
argCounter = 1;
temp = new char [command.size()+1];
strcpy (temp, command.c_str());
token = strtok (temp," ");
childArgs[0] = token;
while (token!=NULL)
{
token = strtok(NULL," ");
childArgs[argCounter] = token;
argCounter++;
}
//delete[] temp; //Should remove token as well?
execvp(childArgs[0], childArgs);
cout<<"PROBLEM!"<<endl;
exit(-1);
}
在main()方法,我的代碼獲取到一個地步,叉()(父進程然後等待子進程退出),那麼子進程(進程ID == 0是?)將用戶輸入(運行+ args的命令)作爲參數調用方法childProcessHandler。然後我標記用戶輸入並調用execvp。
全部編譯並執行。 execvp之後的行永遠不會到達,因爲只有在出現錯誤時纔會返回yes。
該項目是爲了模擬一個unix終端,但是當我給它的命令「日期」沒有得到打印,它應該...孩子退出和父進程恢復就好,但沒有任何東西被髮回到終端窗戶...
我在做什麼錯?
(另外我們「推薦」使用strtok的記號化,但如果任何人有什麼簡單的我接受的觀點。)
謝謝!
EDIT
上面的代碼的工作原理,例如,如果我輸入「日期」而不是「日期」。我認爲可能會有一些「tokenizer」在childArgs []數組的末尾沒有放置空字符。我會玩,並感謝您的快速反應!
(忍者編輯,也註釋掉刪除[]溫度暫時)你是混合的std :: string和炭/炭*
您正在刪除childArgs所指的數組。 –
評論刪除[]溫度,仍然沒有變化。我的理解是,strtok在完全運行後(或者爲什麼不刪除它)會使原始字符串或多或少無用。 – OmegaTwig