Linux 内核是否为 Internet 域套接字创建文件?

Tim*_*Tim 3 linux socket

Linux 内核为绑定到路径名的 Unix 域套接字创建一个文件。

Linux 内核是否为 Internet 域套接字创建文件?

Ser*_*nyy 5

不,不是硬盘驱动器或其他块设备上的文件。

如果您查看Linux 源代码中的socket.c,您会看到它为套接字创建了一个 inode,但是数据位于sockfs 文件系统中,它是内核本身内的一个虚拟文件系统,并且空间是通过 kmalloc 类型的函数分配的。从这个意义上说,套接字是驻留在内存中的匿名文件。

这又回到了“Unix 中的一切都是文件”的概念,这是一种设计模式,专注于让通用实用程序执行与真实物理介质上的文件类似的相同功能。正如Linus Torvalds所说:

“一切都是文件”的全部意义不是你有一些随机的文件名(事实上,套接字和管道表明“文件”和“文件名”彼此无关),而是你可以使用 common操作不同事物的工具。

因此套接字具有 inode 具有类似文件的访问权限,但不存在于物理文件系统上。

但是,请注意,存在 Unix 域套接字,它们是用于进程网络的 IPC 类型的对象,并且驻留在磁盘文件系统上。