如果文件描述符特定于每个进程(即两个进程可以使用相同的文件描述符 id 来引用不同的打开文件),那么如何通过套接字等共享传输文件描述符(例如,共享 mmap)?
它是否依赖于每个进程下的内核映射到相同的数字地址范围?
答案1
当您通过套接字共享文件描述符时,内核会进行调解。您需要使用准备数据这cmsg(3)
,使用发送sendmsg(2)
并使用接收它recvmsg(2)
内核参与了后两个操作,它处理从文件描述符到传输文件描述符所需的任何数据的转换,并使文件描述符在接收进程中可用。
不同进程中的同一个fd如何指向同一个文件?提供有用的背景。发送进程发送一个文件描述符,该文件描述符意味着与其(私有)文件描述符表相关的内容;内核知道它映射到系统范围的打开文件表中的内容,并根据需要在接收进程的文件描述符表中创建一个新条目。