使用execvp时从命令捕获错误(cmd,args)

时间:2011-12-01 03:40:15

标签: c

p = fork;
if (p == 0){
   execvp(args[0], args);
}
else {
   wait(&status);
}

如果给出的命令返回错误,我该如何打印出来?例如,如果我给execvp命令“ls -8”我怎么打印到标准输出

ls:无效选项 - '8'

1 个答案:

答案 0 :(得分:0)

fork时,分叉进程将共享stdin / out / err的相同文件描述符。这意味着它打印到stdout的任何内容都将转到stdout。对于stderr也一样。

exec *()函数替换当前进程。

因此,当“ls -8”向stderr输出内容时,它将转到stderr。你必须将stderr和stdout短路,让stderr去stdout。

你需要这样的东西:

p = fork;
if (p == 0){
   close(2); /* close stderr */
   dup(1); /* duplicate stdout as stderr */
   execvp(args[0], args);
}
else {
   wait(&status);
}