p = fork;
if (p == 0){
execvp(args[0], args);
}
else {
wait(&status);
}
如果给出的命令返回错误,我该如何打印出来?例如,如果我给execvp命令“ls -8”我怎么打印到标准输出
ls:无效选项 - '8'
答案 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);
}