我已经在网上搜索了这个主题并且遇到了这个解释,但我无法理解它背后的想法。代码和说明如下。
#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.*/
LINE F做什么?为什么这很重要?
答案 0 :(得分:2)
这样的代码的目标是更改引用当前打开文件的文件描述符编号。 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)
可能不是绝对必要的。有两个引用同一文件的文件描述符可能没问题。但是,在许多情况下,这可能会导致不良或意外的行为。