1
我試圖在我正在創建的bash shell中實現||
,&&
和;
運算符。我試圖做的是使用int
作爲標誌,如果成功則設置爲1,否則設置爲0。我的問題是,即使我進入一個無效的操作,比如ls -apples
它設置標誌爲1。我也得到了錯誤信息在C++中實現shell的bash運算符
LS:無效選項 - 「E」 嘗試「LS --help」欲瞭解更多信息
所以我認爲這意味着它在技術上是執行? 如何跟蹤execvp
是否進行了無效操作? 這裏是我的代碼:
pid_t pid;
pid_t waitId;
int status;
//forks into two processes
pid = fork();
//There was an error during fork
if (pid < 0)
{
successFlag = 0;
perror("There was an error");
}
else if (pid == 0)
{
//must be cast because our function expects a char *const argv[]
if (execvp(command[0], (char**)command) < 0)
{
//error at execvp
successFlag = 0;
perror("There was an error executing the process");
}
exit(EXIT_FAILURE);
}
else
{
do
{
waitId = waitpid(pid, &status, WUNTRACED | WCONTINUED);
if(waitId == -1){
successFlag = 0;
perror("Error in parent process");
exit(EXIT_FAILURE);
}
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
//use this flag to determine whether the process was a success
successFlag = 1;
你是對的,ls命令跑了。如果我正確理解你的問題陳述,你想確定命令是否發送失敗。在這種情況下,您希望命令返回的「錯誤代碼」(退出代碼)。 –
我做了什麼,看看'waitpid'的'status'值。我發現任何不是0的值都是無效的。我做了一個布爾標誌來處理這個。這有效嗎? – ecain