2015-11-03 84 views
1

我正在寻找一种方法来确定函数execvp是成功还是失败。我知道如果它返回那么它失败了,但我正在寻找从execvp启动的命令失败的情况。例如在“ls”试图列出不存在的文件夹的情况下。由此我计划添加对逻辑运算符的支持(例如& &,||)。谢谢。确定execvp是成功还是失败

else { 
    int status; 
    if (wait(&status) < 0) { 
     perror("wait failed"); 
     exit(0); 
    } 
    if (status == 0) { 
     success = true; 
    } 
    else { 
     success = false; 
    } 
} 

回答

3

您需要首先fork()一个新的进程,然后有新的进程调用execvp。然后父进程应该调用wait(),这将允许它检索您运行的命令的退出状态(在这种情况下为ls)。

当检查从wait()检索到的返回状态时,请确保使用WIFEXITED()确保孩子正常退出,并使用WEXITSTATUS()提取退出状态。

+0

现在我有这个,在我的检查结束,看看叉是否失败。但我不认为我正在寻找来自地位的正确信息。 'else if(c_pid> 0){0} {pid = waitpid(c_pid,&status,0); if(pid == -1){perror(“wait failed”); \t exit(0); \t} if(status == 0){ \t success = true; \t} success = false;如果((pid = wait(&status))<0){ / /* perror(“wait ...”); exit(1); } */ }' – xythyl

+0

@xythyl使用您的代码更新您的问题。在评论中阅读是不可能的。 – dbush

+0

谢谢!另外,如何正确地在这里发布代码?出于某种原因,它没有保存任何格式。 – xythyl

相关问题