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)引用的文件 - 为此,您需要dup()dup2() - 或fcntl(),或close()。 (诸如 open()pipe() 之类的调用不会影响任何已打开的文件描述符;它们返回以前未使用过的新描述符。

一种看待它的方式是:保存文件描述符编号的变量没有什么独特之处——任何int具有相同编号的变量都可以用作文件描述符。 但是更改文件描述符引用的文件是一项更复杂的工作,需要系统调用。

相关内容

  • 没有找到相关文章