文件描述符与索引节点
一般来讲,使用与管理文件是通过文件名来进行的,但从应用编程的角度看,文件描述符更有用,而系统中的文件在本质上是通过
其索引节点进行管理的。
文件描述符是应用程序中表示被打开的文件的一个整数,其他对文件的操作接口都要使用这个整数来指定所操作的文件。
从系统的角度来看,文件的索引节点(inode)是文件的唯一标识。一个文件的inode包含文件系统处理文件所需要的全部信息,如
访问权限、当前大小等。详细来说,实际上存在两种类型的inode:一个是所谓的内核inode(in-core inode),保存在内存中,在系统中
每个打开的文件都对应着一个内核inode;另一个是磁盘inode(on-disk inode),在文件系统中的每一个文件都有一个磁盘inode,保存在
磁盘上,它所保存的具体信息与文件系统的类型有关。当进程打开一个文件时,文件的磁盘inode中的信息就会被载入内存,并建立一个内
核inode。当内核inode被修改后,系统负责将其同步到磁盘上。磁盘inode与对应的内核inode所保存的信息并不是完成相同的。内核inode
记录的是关于文件的更通用的一些信息,而忽略掉与具体文件系统类型相关的一些信息。
一般而言,一个inode应当记录如下信息:
* 文件类型
* 与文件相关的硬链接的个数
* 以字节为单位的文件的长度
* 设备标识符
* 在文件系统中标识文件的索引号
* 文件所属用户的UID(User ID,用户标识符)
* 文件所属组的GID(Group ID,组标识符)
* 各种时间戳,包括文件状态的改变时间、文件的最后访问时间和最后修改时间