Dr.*_*all 5 c driver device linux-kernel
我正在阅读 Linux 设备驱动程序编程第 3 版,并且一直在尝试掌握 openfiles 与 inode 的关系。根据书中的说法,“内核中的文件结构被认为是一个打开的文件”。书中还说,“inode 结构在内核内部用于表示文件。因此,它与用于表示打开文件的文件结构不同。” 这个声明本身让我完全困惑,因为在我看来文件和打开的文件是同一件事。我什至不明白在这种情况下打开文件是什么意思。我完全困惑,什么是打开的文件?什么是索引节点?又有什么区别呢?
ext2+、NTFS 和其他文件系统在驱动器上有一个文件主表,而目录只是一种特殊的文件,其中充满了指向文件表中条目的记录。(此设置允许硬链接以及通过目录结构不可见的“临时文件”。)“inode”是 Linux(也可能是其他 *nixes)对这些主文件表条目的术语。
不过,索引节点不会跟踪文件中的当前位置或当前模式(打开以读取、写入,两者......?)。它只包含帮助操作系统查找磁盘上文件内容的信息,并防止不应该乱搞它的人这样做。您需要不同的结构来跟踪该信息。这可能是您看到的“打开文件”结构。
显然,“文件”结构内部还有一个结构,其中充满了指向可以对文件执行的操作的函数的指针。这是为了支持 Unix 的“一切都是文件”理念,让您可以像普通文件一样读写套接字,并提供一种抽象文件系统的方法 -适用于所有内容的代码中的特定代码(这使得支持多种文件系统类型变得更加容易)。