精通Unix下C语言之文件系统结构

本文深入探讨Unix文件系统结构,包括引导块、超级块、i节点区和数据区,并详细解析i节点中存储的文件属性如类型、权限、属主ID等。同时介绍了文件读取原理及如何获取文件属性信息。

精通Unix下C语言之文件系统结构

 

  Unix文件的存储由“目录--i节点--数据块”三级组成,其中目录存储了文件的层次结构,数据块存储了文件的具体内容信息,i节点是连接文件层次结构与其数据内容的桥梁。

  Unix下的文件包括了文件类型、文件访问权限、文件属主ID、文件属组ID、文件链接数、文件长度和文件时间等信息,这些信息存储在文件对应的i节点中。

 

1.1 文件系统的结构

   磁盘包含着一个或多个分区,每个分区都有一个文件系统。Unix文件系统将磁盘空间分为一系列大小想通的块(block),全部块可分为引导块、超级块、i节点区(inode区)和数据区等四个部分。

1.引导块

   引导块位于文件系统的第0块物理块,即文件卷的第一扇区,不属于文件系统管辖,存在文件系统的引导代码。

2.超级块

  超级块位于文件系统的第1号物理块、紧跟引导块之后,描述文件系统本身的结构信息。超级块的数据结构一般定义在文件“filsys.h”中,/usr/include/sys/filsys.h

 

 struct filsys

{

   Ushort  s_isize;/*磁盘索引节点区所占用的数据块数*/

   daddr_t  si_fsize;/*整个文件系统的数据块数*/

   short  s_nfree;/*在空闲块登录表中当前登记的空闲块数目*/

   daddr_t s_free[NICFREE];/*空闲块登记表*/

   short  s_ninode;/*空闲索引节点数*/

   ino_t  s_inode[NICFREE];/*空闲节点登记表*/

   chars_flock; /*加锁标志位*/

    .

    .

    .

    .

};

 

3.i节点区(inode区)

  i节点区位于超级块之后,长度犹超级块中的s_isize中决定,它描述文件的属性,如长度、属主、属组、数据块表盒最近访问时间等。i节点的数据结构一般定义在"ino.h"/* /usr/include/sys/ino.h*/

struct dinode

{

   ushort di_mode;/*文件类型与权限*/

   short  di_nlink;/*文件链接数*/

   ushort di_uid;/*文件属主id*/

   ushort di_gid;/*文件属组ID*/

   off_t  di_size;/*文件长度*/

   char di_addr[NADDR_BYTES];/*文件磁盘块地址列表*/

   char  di_gen;/*file generation number*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值