linux 文件描述符表 打开文件表 inode vnode
来源:互联网 发布:淘宝店铺怎么改所在地 编辑:程序博客网 时间:2024/06/05 06:21
http://blog.csdn.net/kennyrose/article/details/7595013
在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。
每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,否则文件位置都被置为0,即文件的开始处,此后的读或写操作都将从文件的开始处执行,但你可以通过执行系统调用LSEEK(随机存储)对这个文件位置进行修改。Linux中专门用了一个数据结构file来保存打开文件的文件位置,这个结构称为打开的文件描述(open file description)。这个数据结构的设置是煞费苦心的,因为它与进程的联系非常紧密,可以说这是VFS中一个比较难于理解的数据结构。
file结构中主要保存了文件位置,此外,还把指向该文件索引节点的指针也放在其中。file结构形成一个双链表,称为系统打开文件表,其最大长度是NR_FILE,在fs.h中定义为8192。
file结构在include\linux\fs.h中定义如下:
- struct file
- {
- struct list_head f_list; /*所有打开的文件形成一个链表*/
- struct dentry *f_dentry; /*指向相关目录项的指针*/
- struct vfsmount *f_vfsmnt; /*指向VFS安装点的指针*/
- struct file_operations *f_op; /*指向文件操作表的指针*/
- mode_t f_mode; /*文件的打开模式*/
- loff_t f_pos; /*文件的当前位置*/
- unsigned short f_flags; /*打开文件时所指定的标志*/
- unsigned short f_count; /*使用该结构的进程数*/
- unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
- /*预读标志、要预读的最多页面数、上次预读后的文件指针、预读的字节数以及预读的页面数*/
- int f_owner; /* 通过信号进行异步I/O数据的传送*/
- unsigned int f_uid, f_gid; /*用户的UID和GID*/
- int f_error; /*网络写操作的错误码*/
- unsigned long f_version; /*版本号*/
- void *private_data; /* tty驱动程序所需 */
- };
struct file { struct list_head f_list; /*所有打开的文件形成一个链表*/ struct dentry *f_dentry; /*指向相关目录项的指针*/ struct vfsmount *f_vfsmnt; /*指向VFS安装点的指针*/ struct file_operations *f_op; /*指向文件操作表的指针*/ mode_t f_mode; /*文件的打开模式*/ loff_t f_pos; /*文件的当前位置*/ unsigned short f_flags; /*打开文件时所指定的标志*/ unsigned short f_count; /*使用该结构的进程数*/ unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin; /*预读标志、要预读的最多页面数、上次预读后的文件指针、预读的字节数以及预读的页面数*/ int f_owner; /* 通过信号进行异步I/O数据的传送*/ unsigned int f_uid, f_gid; /*用户的UID和GID*/ int f_error; /*网络写操作的错误码*/ unsigned long f_version; /*版本号*/ void *private_data; /* tty驱动程序所需 */};
内核中,对应于每个进程都有一个文件描述符表,表示这个进程打开的所有文件。文件描述表中每一项都是一个指针,指向一个用于描述打开的文件的数据块———file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此某个进程关闭文件,不影响与之共享同一个file对象的进程.
- linux 文件描述符表 打开文件表 inode vnode
- linux 文件描述符表 打开文件表 inode vnode
- linux 文件描述符表 打开文件表 inode vnode
- linux 文件描述符表 打开文件表 inode vnode
- linux 文件描述符表 打开文件表 inode vnode
- linux 文件描述符表 打开文件表 inode
- Linux/Unix inode、vnode、dentry、file、进程表、文件表(上)
- Linux/Unix inode、vnode、dentry、file、进程表、文件表(中)
- Linux/Unix inode、vnode、dentry、file、进程表、文件表(下)
- Linux编程基础:文件描述符file descriptor与inode
- linux系统文件描述符file descriptor与inode的相关知识 , 文件描述符泄露
- Linux最大打开文件描述符数
- Linux最大打开文件描述符数
- Linux最大打开文件描述符数
- Linux最大打开文件描述符数
- Linux最大打开文件描述符数
- Linux最大打开文件描述符数
- linux设置打开文件描述符数量
- 百度贴吧客户端(Android)网络通信行为分析
- (转)经典POJ题目 (赛前练手)
- android_View回调函数
- 第八周组队赛(周一)130827
- Win8和Linux Ubuntu12.04共存问题解决实录
- linux 文件描述符表 打开文件表 inode vnode
- sql server 40 错误
- Mac下配置Android NDK环境并搭建Cocos2d-x环境并Eclipse正常编译运行Cocos2dX自带TestsDemo项目
- Java基础08:多态;多态扩展;object类;多态的特点
- OGG主要进程理解
- WinCE6.0中文定制乱码问题
- C#开发的应用程序做退出程序的代码
- 请问各位大侠,我在应用里面发送短信,想给里面的几个字符加上链接和文字颜色以及下划线,请问怎么做?
- OGG mgr ext rep 参数文件说明