文档介绍
* VFS的组成(主要数据结构) 文件对象 每个文件都用一个32位数字来表示下一个读写的字节位置,通常称它为文件位置或偏移量(offset),每当打开一个文件时,偏移量被置0,读写操作便从这里开始,允许通过系统调用lseek对文件位置作随机定位。 Linux建立文件对象(file)来保存打开文件的文件位置,file结构除保存文件当前位置外,还把指向该文件inode的目录项指针也放在其中,并形成一个双向链表,称系统打开文件表。 操作系统之所以不直接使用dentry结构是因为多个进程能够打开同一个文件,因为每一个file结构实际上对应了一个进程的一次打开过程。file结构中记录了文件访问模式,读写指针等信息。 * struct file { struct list_head f_list; //所有打开文件形成的链表 struct dentry *f_dentry; //指向相关目录项的指针 struct vfsmount *f_vfsmnt; //指向VFS安装点的指针 struct file_operation *f_op; //指向文件操作函数的指针 unsigned long f_reada; //预读标志 unsigned long f_ramax; //预读的最多页数 unsigned long f_raend; //上次预读后的指针 unsigned long f_ralen; //预读的字节数 unsigned long f_rawin; //预读的页数 mode_t f_mode; //文件访问模式 loff_t f_pos; //文件当前偏移量 unsigned short f_count; //使用该文件的进程数 unsigned int f_uid; //使用者的用户标识 unsigned int f_gid; //使用者的用户组标识 … }; 系统打开