【问题标题】:returning error when execvp does not find programexecvp 找不到程序时返回错误
【发布时间】:2017-02-04 11:39:23
【问题描述】:
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; 
    }
}

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

例如,如果我输入“heyman”,我只会返回“heyman”,而我想返回某种错误(“heyman”不是命令)。

我希望 exit(EXIT_FAILURE) 会这样做,但它没有。如果有人可以在这里帮助我,将不胜感激

【问题讨论】:

    标签: c linux unix fork exec


    【解决方案1】:

    使用perror()报错。

    if (execvp(program, args) == -1) {
        perror("execvp");
        exit(EXIT_FAILURE);
    }
    

    没有必要在子函数中使用return (int)child_pid。如果execvp()成功,则后面的代码都不会运行;如果失败,则报告错误并退出。

    【讨论】:

    • 那行得通。你能告诉我你是怎么知道的或者你从哪里发现的吗?我想知道一个可以用于 linux 编程而不是不断提问的资源
    • 我从哪里得知perror()?我不记得了,我已经知道了 20 多年了。任何像样的 Unix 编程教科书都应该有。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2021-07-01
    • 2015-10-27
    相关资源
    最近更新 更多