【发布时间】:2016-07-11 02:18:11
【问题描述】:
我对文件描述符感到困惑。我知道要复制它们,我们需要系统调用 dup2() 或 dup()。但是为什么我们不能通过将旧值分配给新变量来复制它们呢?例如,为什么我们可以这样做
int f[2];
pipe(f); // I call pipe just to create two file descriptors, nothing special
int new_descriptor = f[0]; // this line is where I'm confused
是因为 f[0],f[1] 的整数具有特定的含义,并且是某种编码的吗? 谢谢!
【问题讨论】:
-
dup创建并返回指向同一文件的新 fd。 fd 是进程文件表的索引,因此dup实际上在进程文件表上找到下一个打开位置,将指向(内核中)文件结构的指针复制到该位置并将索引返回给用户空间。