Operating system 文件描述符表是否由每个进程自行维护

Operating system 文件描述符表是否由每个进程自行维护,operating-system,system-calls,file-descriptor,Operating System,System Calls,File Descriptor,维基说 在Unix的传统实现中,文件描述符索引到由内核维护的每个进程的文件描述符表中,该表反过来索引到由所有进程打开的系统范围的文件表中,称为文件表 内核是否仅在执行开放系统调用时返回fd,或者更确切地说,在每个进程中返回fd 它还为被调用进程创建类似fd table的东西 fd在系统范围内是唯一的吗?我真的很好奇,当我们打开或写入文件时,下面会发生什么?要理解这一点,你可以这样想,当你打开任何文件、管道或设备文件时,它们都有与之相关的不同驱动程序,所以要知道在使用读、写、,为了将inode链接

维基说

在Unix的传统实现中,文件描述符索引到由内核维护的每个进程的文件描述符表中,该表反过来索引到由所有进程打开的系统范围的文件表中,称为文件表

内核是否仅在执行开放系统调用时返回fd,或者更确切地说,在每个进程中返回fd 它还为被调用进程创建类似fd table的东西


fd在系统范围内是唯一的吗?我真的很好奇,当我们打开或写入文件时,下面会发生什么?

要理解这一点,你可以这样想,当你打开任何文件、管道或设备文件时,它们都有与之相关的不同驱动程序,所以要知道在使用读、写、,为了将inode链接到更新上次访问的文件或锁定文件,内核创建了一个与每个文件关联的数据结构

而且其他后台进程也可能正在运行,所以为了管理这些文件,内核会创建一个包含这些数据结构的表,并在表中返回该数据结构行的索引号。我们称之为文件描述符


所以根据您的问题,每次调用open时都会创建一行,它可以在单个进程中多次创建,也可以在不同的进程中创建,总是返回与内核表中的行相关联的FD总是不同的。

Linux是开源的。去看看,我不明白这个问题。