1
p = fork;
if (p == 0){
execvp(args[0], args);
}
else {
wait(&status);
}
如果给出的命令返回一个错误,该如何打印出来?例如,如果我给execvp命令“ls -8”我怎么把它打印到标准输出使用execvp时从命令中捕获错误(cmd,args)
LS:无效选项 - “8”
p = fork;
if (p == 0){
execvp(args[0], args);
}
else {
wait(&status);
}
如果给出的命令返回一个错误,该如何打印出来?例如,如果我给execvp命令“ls -8”我怎么把它打印到标准输出使用execvp时从命令中捕获错误(cmd,args)
LS:无效选项 - “8”
当你叉,叉状进程将共享相同的stdin/out/err的文件描述符。这意味着无论它打印到标准输出将转到标准输出。与stderr相同。
exec *()函数替换当前进程。
因此,当“ls -8”打印某些内容时,它会转到stderr。您必须将stderr和stdout短路才能将stderr转至标准输出。
你需要的东西是这样的:
p = fork;
if (p == 0){
close(2); /* close stderr */
dup(1); /* duplicate stdout as stderr */
execvp(args[0], args);
}
else {
wait(&status);
}
NVM ...它已经这样做了笑:( – WillHaack
我认为它不是标准输出,但标准错误:它是由子进程显示。 –