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

标签 c file low-level

我对文件描述符感到困惑。我知道要复制它们,我们需要系统调用 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 变量都可以用作文件描述符。但是更改文件描述符引用的文件是一项复杂得多的工作,并且需要系统调用。

关于c - 为什么我们不能通过简单地将值分配给新变量来复制文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298279/

相关文章:

c - 优化嵌套循环

c - 在 pthread_join() 中阻塞

file - 在php中使用multipart/form-data请求发送文件

Java - 排序类别

c# - 使用低级键盘 Hook 更改键盘字符

c - 如何像 shmget 一样在内存中重新映射文​​件 mmap(2)-ed

c - 这个 x86 内联汇编在做什么?

c++ - VirtualAllocEx 成功返回一个基地址,但是 WriteProcess 失败,错误是 487

Swift:过滤相关文件/忽略应用程序包的子文件夹

macos - 控制 MagSafe 2 上的 LED(向检测引脚发送任意数据)