确定execvp是否成功或失败

确定execvp是否成功或失败,c,unix,C,Unix,我正在寻找一种方法来确定函数execvp是否成功或失败。我知道如果它返回,那么它就失败了,但是我正在寻找一个从execvp启动的命令失败的例子。例如,“ls”试图列出一个不存在的文件夹。在此基础上,我计划添加对逻辑运算符的支持(例如&&、| |)。谢谢 else{ 智力状态; 如果(等待(&status)0){pid=waitpid(c_pid,&status,0);if(pid=-1){perror(“wait failed”);exit(0);}if(status==0){success=t

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

else{
智力状态;
如果(等待(&status)<0){
perror(“等待失败”);
出口(0);
}
如果(状态==0){
成功=真实;
}
否则{
成功=错误;
}
}

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

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

pid_t pid = fork();
if (pid == -1) {
    perror("fork failed");
    exit(1);
} else if (pid == 0) {
    execlp("/bin/ls","ls","-l","xyz",NULL);
    perror("exec failed");
    exit(1);
} else {
    int status;
    pid = wait(&status);
    if (WIFEXITED(status)) {
        printf("pid %d exited with status %d\n", pid, WEXITSTATUS(status));
    } else {
        printf("pid %d exited abnormally\n"
    }
}

现在我有这个,在我的检查结束时,看看fork是否失败了。但我认为我没有从状态中寻找正确的信息
else if(c_pid>0){pid=waitpid(c_pid,&status,0);if(pid=-1){perror(“wait failed”);exit(0);}if(status==0){success=true;}success=false;/*if((pid=wait(&status))<0){perror(“wait…”);exit(1)}/}
@xythyl使用您的代码更新您的问题。这是不可能在评论中阅读的。谢谢!还有,如何在这里正确地发布代码?由于某些原因,它没有保存任何格式。@xythy将代码粘贴到您的问题中,然后按编辑窗口顶部的“
{}
”按钮对其进行格式设置。
如何等待
获取肯定状态?根据研究,似乎等待实际上并不能决定执行成功与否。
pid_t pid = fork();
if (pid == -1) {
    perror("fork failed");
    exit(1);
} else if (pid == 0) {
    execlp("/bin/ls","ls","-l","xyz",NULL);
    perror("exec failed");
    exit(1);
} else {
    int status;
    pid = wait(&status);
    if (WIFEXITED(status)) {
        printf("pid %d exited with status %d\n", pid, WEXITSTATUS(status));
    } else {
        printf("pid %d exited abnormally\n"
    }
}