我的问题与 Linux 中设备节点的实现方式有关。我知道有像 udev 或 devtmpfs 这样的伪文件系统可用 - 在这种情况下,后面没有真正的存储,文件系统是内核驱动程序向应用程序呈现的幻象。但是,我的问题仍然有效:
- 使用 devtmpfs 或 udev 时 /dev 对用户空间可见的方式。
- /dev 是包含手动创建的设备节点的常规目录的情况。
问题是:
- 设备节点文件是否存储在文件系统中(使用索引节点),或者它们只是目录中的特殊条目?
- 如果它们存储为文件,它们与二进制文件如何区分?设备节点是否分配了特殊的幻数?
在 POSIX 模型中,所有文件都使用 inode,无论其类型如何。目录项只是指向 inode 的名称;文件类型、权限等都存储在 inode 中。所以设备节点也涉及一个inode。您可以通过运行看到这一点
ls -li /dev
:每个条目都有一个相应的索引节点号。设备节点通过存储在 inode 中的文件类型来区别于其他文件类型;这是文件模式的一部分。所有不同的文件类型(请参阅了解 UNIX 权限和文件类型)都有与其关联的“魔法”数字。