1.文件里的数据是放在磁盘的数据区中的,而一个文件名称则是通过相应的i节点与这些磁盘块联系起来。这些盘块的号码就存放在i节点的逻辑块数组i_zone[]中。在文件系统的一个文件夹中,当中全部文件名称信息相应的文件夹项保存在该文件夹名文件的数据块中,比如,root/下的全部文件名称的文件夹项就保存在root/文件夹名文件的数据块中。而文件系统根文件夹下的全部文件名称信息则保存在指定i节点(1号节点)的数据块中。文件名称的文件夹项结构例如以下:

struct dir_entry{

unsigned short indoe;//i节点号

char name[NAME_LEN];//文件名称

};

文件夹项结构大小是16B。那么一个逻辑盘块能够存放1024/16=64个文件夹项。

有关文件的其它信息则保存在该i节点号指定的i节点结构中,每一个i节点号的i节点都位于磁盘的固定地方。

在打开一个文件时。文件系统会依据给定的文件名称找到其i节点号,从而通过其相应i节点信息找到文件所在的磁盘块位置。比如要查找文件/usr/bin/vi的i节点号。文件系统首先从固定i节点号(1号i节点)的根文件夹開始寻找,即从该i节点号1的数据块中找到名为usr的文件夹项,从而得到名为usr的文件夹项,从而得到文件/usr的i节点号,依据该i节点号文件系统能够顺利取得文件夹usr/的内容,并从当中找到bin的文件夹项。同理知道bin的i节点号,这样就知道了/usr/bin文件夹的位置,读取其i节点号的数据块内容,找到vi相应的文件夹项,从而得到vi的i节点号。

2.与文件相关的数据结构

内核使用文件结构file、文件表file_table[]和内存中的i节点表inode_table[]来管理对文件的訪问操作。

struct file
{
unsigned short f_mode;
unsigned short f_flags;
unsigned short f_count;
struct m_inode *f_inode;//相应的内存i节点
off_t f_pos;
};
struct file file_table[NR_FILE];

在进程的task_struct中有个成员:struct file *filp[NR_OPEN]是进程使用的全部打开文件的文件结构指针表。文件描写叙述符fd即该结构的索引值。以下一张图非常好将三者关系展现出来:

最新文章

  1. LINQ to SQL语句(7)之Exists/In/Any/All/Contains
  2. Maven Super POM
  3. 51nod1305 Pairwise Sum and Divide
  4. 6to5 – 让你即刻体验 ECMAScript 6 编程
  5. JavaScript学习03 JS函数
  6. mysql 查看正在运行的进程
  7. GPIO的8种工作模式
  8. WPF 之 布局(一)
  9. 《NFS文件共享服务的搭建》RHEL
  10. [swustoj 594] Maximum Tape Utilization Ratio
  11. 遇到Class Not registered的COM异常怎么办
  12. 【HDU 3435】 A new Graph Game (KM|费用流)
  13. .Net程序员 Solr-5.3之旅 (一)Solr入门
  14. codeforces 609E. Minimum spanning tree for each edge 树链剖分
  15. Java学习笔记之[ 利用扫描仪Scanner进行数据输入 ]
  16. 【特效】hover向上翻转效果
  17. webmagic保存数据
  18. 42028: Assignment 1 – Autumn 2019
  19. Django之ORM操作
  20. 以太坊之——golang以太坊接口调用

热门文章

  1. vue 根据下拉框动态切换form的rule
  2. vuex中mutations与actions的区别
  3. MATLAB解析PFM格式图像
  4. python_传递任意数量的实参
  5. PHP静态延迟绑定简单演示样例
  6. nmq 提交到 npm
  7. 浅谈SaaS应用开发的难度
  8. [Struts2] No result defined for action ... and result input & Invalid field value for field ...
  9. Android应用内加载pdf的方法?
  10. GitHub客户端和Shell的基本操作和理解