p = fork;
if (p == 0){
execvp(args[0], args);
}
else {
wait(&status);
}
如果给定的命令返回一个错误,我如何打印出来?例如,如果我给execvp命令“ls-8”,如何将其打印为标准输出
ls:无效选项--“8”
最佳答案
分叉时,分叉进程将共享stdin/out/err的相同文件描述符。这意味着它打印到stdout的任何内容都将转到stdout。斯特德尔也是。
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);
}
关于c - 使用execvp(cmd,args)时从命令捕获错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8336272/