2011-12-01 51 views
1
p = fork; 
if (p == 0){ 
    execvp(args[0], args); 
} 
else { 
    wait(&status); 
} 

如果给出的命令返回一个错误,该如何打印出来?例如,如果我给execvp命令“ls -8”我怎么把它打印到标准输出使用execvp时从命令中捕获错误(cmd,args)

LS:无效选项 - “8”

+0

NVM ...它已经这样做了笑:( – WillHaack

+0

我认为它不是标准输出,但标准错误:它是由子进程显示。 –

回答

0

当你叉,叉状进程将共享相同的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); 
}