我正在尝试用另一个管道替换标准输入,然后将原始标准输入放回 fd #0。
例如
dup2(p, 0); // p is a pre-existing fd of a pipe
exec(/* some commands */);
//what will be here in order to have the original stdin back?
scanf(...) //continue processing with original stdin.
最佳答案
原始文件一旦被覆盖(关闭)就无法恢复。您可以做的是在覆盖之前保存一份副本(当然,这需要提前计划):
int old_stdin = dup(STDIN_FILENO);
dup2(p, STDIN_FILENO);
close(p); // Usually correct when you dup to a standard I/O file descriptor.
…code using stdin…
dup2(old_stdin, STDIN_FILENO);
close(old_stdin); // Probably correct
scanf(…);
但是,您的代码提到了 exec(...some commands...);
— 如果那是 POSIX execve()
之一函数族,那么除非 exec*()
调用失败。
关于c - 如何恢复被 dup2 覆盖的标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53924800/