linux内核中的文件描述符(一)--基础知识简介
时间:11-22
来源:互联网
点击:
所打开的文件的file对象。既然用一个数组来存放file对象,那么用数组的下标来访问文件就是一件顺理成章的方法,于是,linux就把数组元素的下标叫做该数组元素所对应的文件的文件描述符,该描述符就是系统对文件的标识,这个数组也叫文件描述符数组,如下图所示:
内核通过系统调用dup、dup2和fctl可以使数组中的多个元素指向同一个文件的file对象,也就是说,在linux中,同一个文件可以有多个文件描述符。
3.进程打开文件表
进程描述符数组中存放了一个进程所访问的所有文件,把这个文件描述符数组和这个数组在系统中的一些动态信息组合到一起,就形成了一个新的数据结构——进程打开文件表,即file_struct,其定义如下:
[plain]view plaincopyprint?
- /*
- *Openfiletablestructure
- */
- structfiles_struct{
- atomic_tcount;//引用计数
- spinlock_tfile_lock;/*Protectsallthebelowmembers.Nestsinsidetsk->alloc_lock*/
- structfdtable*fdt;//管理文件描述符
- structfdtablefdtab;//管理文件描述符
- fd_setclose_on_exec_init;//位图
- fd_setopen_fds_init;//位图
- structfile*fd_array[NR_OPEN_DEFAULT];//文件描述符数组
- };
[plain]view plaincopyprint?
- structtask_struct{
- ...
- /*openfileinformation*/
- structfiles_struct*files;
- ...
- };
4.文件描述符的管理
file_struct中的fdt和fdtab用于管理文件文件描述符,一个是fdtable类型,另一个是其指针类型。fdtable的定义如下:
[plain]view plaincopyprint?
- structfdtable{
- unsignedintmax_fds;//可以代开的最大文件数
- intmax_fdset;//位图的最大长度
- intnext_fd;//下一个可用的fd
- structfile**fd;/*currentfdarray指向files_struct的fd_array*/
- fd_set*close_on_exec;
- fd_set*open_fds;//打开的文件标记,比如第2位为0,则打开了2号文件
- structrcu_headrcu;
- structfiles_struct*free_files;
- structfdtable*next;
- };
下图可以很直观的说明文件描述符fd的管理。
linux内核文件描述符基础知 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)