c - 使用 Dup2 重定向输入和输出

标签 c dup2

<分区>

我一直在用 C 编写一个 Unix shell,并且我正在尝试实现输入和输出重定向。为此,我一直在使用 Dup2,并且能够做到这一点,因此我的输出重定向到一个文件,我的输入也被正确重定向。但是,在我完成这些之后,我如何返回到再次使用 Stdin 和 Stdout?

这些是我在需要重定向时运行的代码片段:

在:

inFile = open(tok.infile, O_RDONLY, 0);
inDup = dup2(inFile, STDIN_FILENO);
close(inFile);

输出:

outFile = creat(tok.outfile, 0644);
outDup = dup2(outFile, STDOUT_FILENO);
close(outFile);

最佳答案

int stdinHolder = dup(0);
int stdoutHolder = dup(1);
close(0);
close(1);

完成后,您可以复制回标准输入和标准输出的持有者。

int stdinHolder = dup(1);
int stdoutHolder = dup(0);
close(0);
close(1);

关于c - 使用 Dup2 重定向输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17518014/

相关文章:

c - ANSI C - 不使用数组替换空白字符

linux - 子进程无法从父进程写入的标准输入中获取输入

c - 在 C 中,如何使用 dup2 将 STDOUT_FILENO 重定向到/dev/null,然后再重定向回其原始值?

c - 在C中显示字母数和小数位数

c - scanf inside while循环只工作一次

c - C 中的 int main() 与 void main()

c - 使用 strtok 的未定义行为

c - 在 fork 进程中调用 Execve 的问题

c - 将管道的读取端重定向到文件描述符

c - 在 C 中使用管道,是的 | head 进入无限循环