execvp找不到程序时返回错误

execvp找不到程序时返回错误,c,linux,unix,fork,exec,C,Linux,Unix,Fork,Exec,我知道这段代码有点凌乱,但请容忍我:我正在尝试创建自己的shell。这个函数将启动一个新的子进程并执行代码。但是,在键入字符串时无法返回错误 例如,如果我键入'heyman',我只返回'heyman',而我想返回某种错误('heyman'不是命令) 我希望退出(退出失败)能做到这一点,但它没有做到。如果有人能在这里帮助我使用peror()报告错误,我将不胜感激 int spawn( char* program, char** args) { pid_t child_pid; child_pid

我知道这段代码有点凌乱,但请容忍我:我正在尝试创建自己的shell。这个函数将启动一个新的子进程并执行代码。但是,在键入字符串时无法返回错误

例如,如果我键入'heyman',我只返回'heyman',而我想返回某种错误('heyman'不是命令)

我希望退出(退出失败)能做到这一点,但它没有做到。如果有人能在这里帮助我

使用
peror()
报告错误,我将不胜感激

int spawn( char* program, char** args) {

pid_t child_pid;
child_pid = fork(); 

if( child_pid > 0) {  /
        wait(NULL);
        return (int)child_pid;
}

else {
    if(execvp(program, args) == -1){
        exit(EXIT_FAILURE); 
    }
    return (int)child_pid; 
    }
}
在子函数中不需要使用
return(int)child\u pid
。如果
execvp();如果失败,则报告错误并退出。

使用
peror()
报告错误

int spawn( char* program, char** args) {

pid_t child_pid;
child_pid = fork(); 

if( child_pid > 0) {  /
        wait(NULL);
        return (int)child_pid;
}

else {
    if(execvp(program, args) == -1){
        exit(EXIT_FAILURE); 
    }
    return (int)child_pid; 
    }
}

在子函数中不需要使用
return(int)child\u pid
。如果
execvp();如果失败,则报告错误并退出。

有效。你能告诉我你是怎么知道的或者是从哪里找到的吗?我想知道一个可以用于linux编程的源代码,而不是不断地问问题。我在哪里学到了
peror()
?我不记得了,我知道这件事已经20多年了。任何一本像样的Unix编程教科书都应该有它,这很管用。你能告诉我你是怎么知道的或者是从哪里找到的吗?我想知道一个可以用于linux编程的源代码,而不是不断地问问题。我在哪里学到了
peror()
?我不记得了,我知道这件事已经20多年了。任何一本像样的Unix编程教科书都应该有它。