精通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*/

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

被折叠的 条评论
为什么被折叠?



