Linux Unix中文件描述符的帮助
每个进程都有一个文件描述符表(FDT),每个文件都有一个文件描述符。stdin、stdout和stderr的文件描述符分别为0、1和2。这些值对于所有进程都是相同的。我相信FDT包含对这些文件的INODE条目的引用。文件描述符可跨进程重用,即它们不是全局唯一的。是否有一个由内核维护的全局FDT,每个进程的FDT都引用它?stdin、stdout和stderr的FDT对应于什么?这些特殊文件是否链接到键盘、显示器等。Linux Unix中文件描述符的帮助,linux,unix,Linux,Unix,每个进程都有一个文件描述符表(FDT),每个文件都有一个文件描述符。stdin、stdout和stderr的文件描述符分别为0、1和2。这些值对于所有进程都是相同的。我相信FDT包含对这些文件的INODE条目的引用。文件描述符可跨进程重用,即它们不是全局唯一的。是否有一个由内核维护的全局FDT,每个进程的FDT都引用它?stdin、stdout和stderr的FDT对应于什么?这些特殊文件是否链接到键盘、显示器等。 请提供文章、书籍等的链接。2001年的文章是一个很好的起点。这些机制仍然是相似的
请提供文章、书籍等的链接。2001年的文章是一个很好的起点。这些机制仍然是相似的,尽管实现已经向前推进,并且最好在中进行研究 在内核中,每个打开的文件描述符对应于一个
结构文件
,其中包含有关打开的文件或设备的所有信息。文件描述符实际上只不过是进程的FDT索引。在Linux内核中,struct文件
通过函数附加到FDT。可以将结构文件重新分配给另一个文件描述符
如果进程是通过带有标志的克隆
系统调用创建的,则进程可以共享相同的FDT,但没有全局FDT。正常的fork
操作会创建一个新的FDT,它是父FDT的副本。这种方法的实际用途是将多线程应用程序的每个线程作为共享公共FDT的克隆进程,确保所有线程都可以使用相同的整数文件描述符。如果使用fork
/exec
创建新进程,新进程将从相同的文件描述符开始,但可以在不影响父进程的情况下打开和关闭文件
stdin、stdout、stderr的FDT条目从父级继承。这三个FDT条目的内核实现没有什么特别之处;它们的含义来自C库的常规使用。父进程本身决定它们连接到什么。它们可能连接到字符设备,也可能已连接到文件或管道。对于字符设备,最常见的是tty或pty设备。免费的书中有很多这样的内容。在第3段末尾,我认为您的意思是子进程可以在不影响父进程的情况下打开和关闭文件