rga*_*aut 11 filesystems inode file-descriptor
我理解文件描述符是用于标识文件的内核句柄,而文件的inode编号是指向具有关于文件的其他详细信息的结构的指针(如果我错了,请纠正我).但我无法区分它们.
use*_*740 13
一个索引节点是一个特定的文件系统的神器,以及如何管理间接."传统的*ix"文件系统使用它将文件链接到目录中,甚至将文件的多个部分链接在一起.也就是说,inode表示文件系统实现的物理表现形式.
在另一方面,一个文件描述符是一个不透明的标识符到一个打开的文件由内核.只要文件保持打开状态,就可以使用标识符来执行读取和写入等操作.的"文件"这里的用法是不是用一般的"磁盘上的文件"混淆-而在这种情况下一个文件代表一个流和操作,可以对其执行,不论其来源.
文件描述符是不相关的一个inode,除非这样可以通过特定[文件系统]驱动器内部使用.
差异并不大,两者都与称为"文件"的抽象术语有关.inode是表示文件的文件系统结构.而文件描述符是opensyscall 返回的整数.根据定义:
文件由inode表示.文件的inode是由文件系统保存的结构,其保存有关文件的信息,例如其类型,所有者,权限,inode链接计数等.
另一方面,文件描述符
文件描述符:
open调用返回的值称为文件描述符,实质上是内核保存的打开文件数组的索引.
内核不是按名称表示打开的文件,而是为每个进程使用一个条目数组来打开文件,因此有效的文件描述符是打开文件数组的索引.例如,假设您正在进行以下操作:
read(0, 10)
Run Code Online (Sandbox Code Playgroud)
0表示文件描述符号,10表示读取10个字节.在这种情况下,进程从索引0中的文件/流请求10个字节,这是stdin.内核自动授予每个进程三个开放流:
Descriptor No.
0 ---> stdin
1 ---> stdout
2 ---> stderr
Run Code Online (Sandbox Code Playgroud)
这些描述符由内核免费提供给您.
现在,当您打开一个文件时,在进程中通过open("/home/myname/file.txt")syscall,您将获得新打开文件的索引3,打开另一个文件,获得索引4,依此类推.这些是过程中打开文件的描述符:
Descriptor No.
0 ---> stdin
1 ---> stdout
2 ---> stderr
3 ---> /home/user100/out.txt
4 ---> /home/user100/file.txt
Run Code Online (Sandbox Code Playgroud)
看到OPEN(2)它解释了你打电话时表面下面会发生什么open.