2016-09-27 31 views
0
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。这是启动一个新的子进程并执行代码的函数。但是,我输入字符串时无法返回错误。当execvp找不到程序时返回错误

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

我希望退出(EXIT_FAILURE)会这样做,但它没有。希望如果有人能帮我在这里

回答

3

使用perror()报告错误。

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

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

+0

工作。你能告诉我你是如何知道这个或你从哪里找到的?我想知道一个我可以用于linux编程的源代码,而不是经常问问题 – qaispak

+0

我在哪里学习了'perror()'?我不记得,我已经了解了20多年。任何体面的Unix编程教科书都应该有它。 – Barmar

相关问题