如何解决在C语言中,如何在执行execvp或类似调用时将stdin / stdout / stderr重定向到文件?
正确的方法是替换文件描述符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 ...
}
解决方法
我有以下代码:
pid_t pid = fork();
if (pid == -1)
{
// ...
}
else if (pid == 0)
{
stdin = someopenfile;
stdout = someotherfile;
stderr = somethirdopenfile;
execvp(args[0],args);
// handle error ...
}
else
{
// ...
}
问题是,execvp()
调用的输入/输出仍然是控制台,而不是文件。显然我做错了什么,正确的方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。