如果您使用 dup2() 复制它并关闭它,您可以使用文件描述符吗?

问题描述

所以我尝试使用 fork 将输出重定向到命令中指定的文件。首先我用管道,然后我用 dup2() 像 dup2(output_fd,1) 复制给我的文件文件描述符代替标准输出 然后我关闭 output_fd。关闭输出_fd)。自从我关闭文件后,该进程还会将输出发送到该文件吗?

解决方法

当你这样做

dup2(output_fd,1);

它使 STDOUT 指向 output_fd 指向的句柄。因此,在此阶段,您可以通过两种方式写入 output_fd 指向的流。

现在当你这样做

close(output_fd);

它会关闭 output_fd 但不会 STDOUT。因此,即使您关闭 output_fd,您仍然可以写入管道!