从内核调用open()/ socket()时,如何分配文件描述符?

时间:2015-09-01 23:49:33

标签: linux linux-kernel kernel kernel-module vfs

一些内核库(例如rpc)在内核中打开一个套接字,并与文件描述符(FD)相关联。任何打到代码的进程都可以使用它们。鉴于对于任何进程,FD都存储在其文件描述符表中的task_struct中,这些内核FD存储在哪里以及它们如何计算? 这些不是由流程特别创建的(例如,这些FD是在module_init创建的)。如何分配这些FD的值,过程FD从0,1,2开始并可能重叠这些?

这也扩展到任何其他类型的FD:文件,管道等

1 个答案:

答案 0 :(得分:1)

内核直接使用文件/套接字对象,它不需要用户空间使用的文件描述符。

例如,当在内核中创建套接字(例如,对于RPC)时,它只将inet地址(带端口)与回调函数相关联,回调函数处理在此地址上发送/接收的消息。因此,用户空间程序只需知道此地址即可进行通信。