inode编号和文件描述符之间的区别是什么



我知道文件描述符是识别文件的内核句柄,而文件的索引节点号是指向具有文件其他详细信息的结构的指针(如果我错了,请纠正我)。但我无法区分它们。

inode是特定文件系统的工件,以及它如何管理间接。"传统的*ix"文件系统使用它将文件链接到目录中,甚至将文件的多个部分链接在一起。也就是说,inode表示文件系统实现的物理表现形式。

另一方面,文件描述符是内核打开的文件的不透明标识符。只要文件保持打开状态,该标识符就可以用于执行读取和写入等操作。这里"文件"的用法是,而不是与一般的"磁盘上的文件"混淆——相反,本文中的文件表示一个流和可以对其执行的操作,无论其来源如何。

文件描述符与索引节点无关,除非特定的[文件系统]驱动程序在内部使用。

区别不大,两者都与名为"文件"的抽象术语有关。inode是一种表示文件的文件系统结构。而文件描述符是open系统调用返回的整数。根据定义:

文件由索引节点表示。文件的索引节点是由文件系统保存的一个结构,它保存有关文件的信息,如文件类型、所有者、权限、索引节点链接数等

另一方面,文件描述符

文件描述符:open调用返回的值称为文件描述符,本质上是内核保存的打开文件数组的索引。

内核不通过名称来表示打开的文件,而是为每个进程使用一个打开文件的条目数组,因此文件描述符实际上是打开文件数组的索引。例如,假设您在一个过程中执行以下操作:

read(0, 10)

0表示文件描述符编号,10表示读取10个字节。在这种情况下,进程从索引0中的文件/流请求10个字节,这就是stdin。内核自动为每个进程授予三个开放流:

Descriptor No. 
      0  --->          stdin
      1  --->          stdout
      2  --->          stderr

这些描述符是由内核免费提供给您的。

现在,当您打开一个文件时,在通过open("/home/myname/file.txt")系统调用的过程中,您将为新打开的文件获得索引3,打开另一个文件,获得索引4,依此类推。这些是过程中打开的文件的描述符:

 Descriptor No. 
      0  --->           stdin
      1  --->           stdout
      2  --->           stderr
      3  --->           /home/user100/out.txt  
      4  --->           /home/user100/file.txt

参见OPEN(2),它解释了当您调用open时,曲面下面会发生什么。

根本区别在于inode代表文件,而文件描述符(fd)代表访问文件的票证,权限和时间窗口有限。您可以将inode视为文件的一种复杂ID。每个文件对象都有一个唯一的inode。另一方面,文件描述符是一个"文件描述符";打开";文件。用户程序不知道文件的inode。它使用fd来访问文件。根据用户的权限和用户程序选择的打开文件的模式(例如只读),允许fd对文件执行一组特定的操作。一旦fd是"0";闭合的";除非打开另一个fd,否则用户程序无法访问该文件。在任何给定的时间,可能有多个fds访问相同或不同用户程序中的文件。

相关内容

  • 没有找到相关文章

最新更新