Linux文件描述符

 

        如上图所示,应用程序要想获取磁盘中的数据,首先需要查询其PCB中的文件描述符表,利用文件描述符表中的指针找到文件表的表项,然后再通过文件表中的指针找到inode表的表项,inode表中存放着数据块在内存或磁盘中的位置。

        需要注意的一点是,应用程序只有权限访问其PCB,而无权限去访问“文件表”和“inode”表,这两张表是由操作系统维护的,所以应用程序要想获取内存或磁盘中的数据,只能交出自己的“需求清单”,然后由操作系统按照“清单”去查询数据并返回给应用程序,而这一“清单”就是“文件描述符表”。

        文件描述符表记录着进程已经打开文件的文件描述符。

        Linux内核代码中:

struct file * fd_array[NR_OPEN_DEFAULT];

        文件描述符就是这个数组fd_array的下标,而数组里面存储着指向“文件表”的指针。

        文件描述符0是标准输入,1是标准输出,2是标准错误,大于等于3的文件描述符才可以被分给其它文件。并且系统分配文件描述符时,是按照“空闲、最小”的规则分配的。

        假设3,4,5,6已经被分配给了文件A,B,C,D,然后文件B被删除,文件描述符4被回收。如果又来了个文件E,此时3,5,6已经被分配,4是空闲且最小的文件描述符,所以将4分配给文件E。

 

参考链接:

  • https://blog.csdn.net/wwwlyj123321/article/details/100298377
  • https://zhuanlan.zhihu.com/p/134036259
posted @ 2023-01-31 16:36  泓溪  阅读(86)  评论(0编辑  收藏  举报