文件描述符和 /dev/fd

rub*_*buc 7 open-files

文件描述符在整个进程或整个系统中是唯一的。因为每个文件似乎都对 stdin 和 stdout 使用相同的描述符。这些有什么特别之处吗?标准输入和标准输出如何工作?我意识到dev/fd, 是指向 的链接proc/self/fd,但是它们如何具有相同的编号?

编辑: 即使在查看其他进程后,大多数文件描述符的数字也大致相同。

Sté*_*nez 7

这里有几件事可能会令人困惑。

Filedescriptors 附加到文件(在一般意义上)并且特定于给定的进程。文件描述符本身由其关联进程通过数字 id 引用,但一个文件描述符可以有多个 id。示例:ids 1 和 2 被称为标准输出和标准错误通常指的是同一个文件描述符。

符号链接/proc/pid/fd/x仅提供进程pidx文件描述符链接到的提示。如果它是一个普通文件,符号链接会给出它的路径。但是如果文件描述符是一个 inet 套接字,那么符号链接就被破坏了。对于常规文件(或具有类似 tty 路径的文件),可以打开它,但您将获得同一对象的不同文件描述符。