为什么我们不能通过简单地将值分配给新变量来复制文件描述符?

时间:2016-07-11 02:18:11

标签: c file low-level

我是刚开始学习低级东西和C的新手。这可能是一个愚蠢的问题,但我对文件描述符感到困惑。我知道要复制它们,我们需要系统调用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]的整数具有特定含义,并且是某种编码的? 谢谢!

1 个答案:

答案 0 :(得分:4)

您可以按分配复制文件描述符。您不能做的是更改特定文件描述符编号(例如1)所指的文件 - 为此,您需要dup()dup2() - 或{{1 },或fcntl()。 (诸如close()open()之类的调用不会影响任何已经打开的文件描述符;它们会返回一个之前未使用的新文件描述符。)

查看它的一种方法:保存文件描述符编号的变量没有什么区别 - 任何保持相同编号的pipe()变量都可以用作文件描述符。但是,更改文件描述符引用的文件是一项复杂得多的工作,需要进行系统调用。