我有以下代码:
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()
调用的输入/输出仍然是控制台,而不是文件。显然我做错了什么,正确的方法是什么?
最佳答案
正确的方法是使用 dup2 将文件描述符
。您还应该关闭子进程中的原始文件:STDIN_FILENO
、STDOUT_FILENO
和 STDERR_FILENO
替换为打开的文件()
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 ...
}
关于c - 在 C 中,如何在进行 execvp() 或类似调用时将 stdin/stdout/stderr 重定向到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543443/