正确的方法是替换文件描述符STDIN_FILENO
,STDOUT_FILENO
并STDERR_FILENO
使用打开的文件dup2()
。然后,您还应该在子进程中关闭原始文件:
else if (pid == 0)
{
dup2(fileno(someopenfile), STDIN_FILENO);
dup2(fileno(someotherfile), STDOUT_FILENO);
dup2(fileno(somethirdopenfile), STDERR_FILENO);
fclose(someopenfile);
fclose(someotheropenfile);
fclose(somethirdopenfile);
execvp(args[0], args);
// handle error ...
}