我正在阅读Linux设备驱动程序编程第3版,我一直在努力掌握openfiles vs inode。从书中所说,“内核中的文件结构被认为是一个打开的文件。”该书还说,“inode结构在内核中用于表示文件。因此它与用于表示打开文件的文件结构不同。”这个陈述本身就让我感到困惑,因为文件和打开的文件在我看来是同样的事情。在这种情况下,我甚至不了解它们对于打开文件的含义。我完全糊涂了,什么是开放文件?什么是inode?有什么区别?
答案 0 :(得分:3)
inode基本上是位于一个或多个文件中的数据(它实际上是某种表的索引,您可以使用该索引找到该数据)。
另一方面,文件是指向inode的目录条目。
这就是类UNIX操作系统实现硬链接的方式,两个文件的“等效”能力,因此更改一个将改变另一个。由于inode对于每个文件系统是唯一的,因此您可以有多个文件引用相同的数据(当然,只要它在同一个文件系统上)。
答案 1 :(得分:2)
ext2 +,NTFS和其他文件系统在驱动器上有一个主表文件,目录只是一种特殊类型的文件,其中包含指向文件表中条目的记录。 (此设置允许硬链接,以及通过目录结构无法看到的“临时文件”。)“inode”是Linux(可能还有其他* nixes')用于这些主文件表条目的术语。
但是,inode不会跟踪文件中的当前位置或当前模式(打开以进行读取,写入,同时......?)。它只包含有助于操作系统在磁盘上查找文件内容的信息,并让那些不应该弄乱它的人不要这样做。您需要一个不同的结构来跟踪该信息。这可能是你所看到的“开放文件”结构。
显然,“文件”结构里面还有一个结构,里面装满了你可以对文件做的东西的函数指针。这是为了支持Unix的“一切都是文件”的理念,让你以与普通文件相同的方式读取和写入套接字,以及提供一种抽象文件系统的方法 - 来自代码的特定代码,这些代码适用于所有内容(这使得支持多种文件系统类型变得更加容易)。
答案 2 :(得分:0)
inode是表示文件的磁盘上元数据。它包含文件的权限位,创建/修改/访问时间戳,实际文件类型,文件大小等...
“打开文件”只是您进程中的一点内存。通常它是一个数组条目,您从fopen()调用获得的文件句柄是特定的数组键。该数组条目将包含(除其他外)光标的当前位置,您将使用fwrite / fread调用读取/写入数据。
答案 3 :(得分:0)
根据内核设备驱动程序3rd(ldd3):
内核使用inode结构来表示 文件。因此,它与文件结构不同 表示打开的文件描述符。可以有很多文件 表示单个文件上多个开放描述符的结构, 但他们都指向一个inode结构。
答案 4 :(得分:0)
inode是“文件”(例如/ etc / passwd)或“目录”的实例/主体(例如。 /等等)。 但是,“结构文件”是“文件”或“目录”的inode上更改(例如,open-read / write-close)实例的一部分。
每个文件系统(包括VFS)必须提供基本机制:1)表示“文件”或“目录”;那是inode。 2)操作inode的操作;这是开放式读/写 - 关闭。每次打开“文件”或“目录”时,我们都会在内核中获得“struct file”。所以我们可以为'文件'或'目录'提供许多'struct file'。每个'struct file'都反映了它的操作。在'struct file'中有一些标志和模式以及lseek,我们用它来协助open-read / write-close。