打开文件和inode有什么区别?

时间:2012-03-04 05:37:19

标签: c linux-kernel driver device

我正在阅读Linux设备驱动程序编程第3版,我一直在努力掌握openfiles vs inode。从书中所说,“内核中的文件结构被认为是一个打开的文件。”该书还说,“inode结构在内核中用于表示文件。因此它与用于表示打开文件的文件结构不同。”这个陈述本身就让我感到困惑,因为文件和打开的文件在我看来是同样的事情。在这种情况下,我甚至不了解它们对于打开文件的含义。我完全糊涂了,什么是开放文件?什么是inode?有什么区别?

5 个答案:

答案 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。