我在网上搜索了这个话题,找到了这个解释,但我无法理解它背后的含义代码和解释如下。。

#include <unistd.h>
...
int pfd;
...
close(1);
dup(pfd);
close(pfd); //** LINE F **//
...

/*The example above closes standard output for the current
processes,re-assigns standard output to go to the file referenced by pfd,
and closes the original file descriptor to clean up.*/

F行是做什么的为什么这么重要?

最佳答案

这样的代码的目标是更改引用当前打开文件的文件描述符号dup允许您创建一个新的文件描述符编号,该编号引用与另一个文件描述符相同的打开文件dup函数保证使用尽可能少的数字close使文件描述符可用这种行为组合允许执行以下操作序列:

close(1);  // Make file descriptor 1 available.
dup(pfd);  // Make file descriptor 1 refer to the same file as pfd.
           // This assumes that file descriptor 0 is currently unavailable, so
           // it won't be used.  If file descriptor 0 was available, then
           // dup would have used 0 instead.
close(pfd); // Make file descriptor pfd available.

最后,文件描述符1现在引用的文件与pfd以前引用的文件相同,并且不使用pfd文件描述符引用已有效地从文件描述符pfd传输到文件描述符1。
在某些情况下,close(pfd)可能不是严格必要的有两个引用同一个文件的文件描述符是可以的然而,在许多情况下,这可能会导致不受欢迎或意外的行为。

09-05 13:39