Linux-文件-数据结构
2017-12-16 17:00
197 查看
Linux内核使用文件结构file和文件表file_talbe[]来管理对文件的操作访问。
文件数据结构如下所示:
// 文件结构(用于在文件句柄与i节点之间建立关系)
struct file {
unsigned shortf_mode; // 文件操作模式(RW位)
unsigned shortf_flags; // 文件打开和控制的标志。
unsigned shortf_count; // 对应文件引用计数值。
struct m_inode * f_inode; //
指向对应i节点。
off_t f_pos; //
文件位置(读写偏移值)。
};
// 这是在内存中的i节点结构。前7项与d_inode完全一样。
struct m_inode {
unsigned short i_mode; //
文件类型和属性(rwx位)。
unsigned shorti_uid; // 用户id(文件拥有者标识符)。
unsigned longi_size; // 文件大小(字节数)。
unsigned longi_mtime; // 修改时间(自1970.1.1:0算起,秒)。
unsigned chari_gid; // 组id(文件拥有者所在的组)。
unsigned chari_nlinks; // 文件目录项链接数。
unsigned shorti_zone[9]; // 直接(0-6)、间接(7)或双重间接(8)逻辑块号。
/* these are in memory also */
struct task_struct * i_wait; //
等待该i节点的进程。
struct task_struct * i_wait2;
/* forpipes */
unsigned longi_atime; // 最后访问时间。
unsigned long i_ctime; // i节点自身修改时间。
unsigned shorti_dev; // i节点所在的设备号。
unsigned shorti_num; // i节点号。
unsigned shorti_count; // i节点被使用的次数,0表示该i节点空闲。
unsigned chari_lock; // 锁定标志。
unsigned chari_dirt; // 已修改(脏)标志。
unsigned chari_pipe; // 管道标志。
unsigned chari_mount; // 安装标志。
unsigned chari_seek; // 搜寻标志(lseek时)。
unsigned chari_update; // 更新标志。
};
4000
ad * s_imap[8]; // i节点位图缓冲块指针数组(占用8块,可表示64M)。 struct buffer_head * s_zmap[8]; // 逻辑块位图缓冲块指针数组(占用8块)。 unsigned shorts_dev; // 超级块所在的设备号。 struct m_inode * s_isup; // 被安装的文件系统根目录的i节点。(isup-superi) struct m_inode * s_imount; // 被安装到的i节点。 unsigned long s_time; // 修改时间。 struct task_struct * s_wait; // 等待该超级块的进程。 unsigned chars_lock; // 被锁定标志。 unsigned chars_rd_only; // 只读标志。 unsigned chars_dirt; // 已修改(脏)标志。 }; // 磁盘上超级块结构。上面125-132行完全一样。 struct d_super_block { unsigned shorts_ninodes; // 节点数。 unsigned shorts_nzones; // 逻辑块数。 unsigned shorts_imap_blocks; // i节点位图所占用的数据块数。 unsigned short s_zmap_blocks; // 逻辑块位图所占用的数据块数。 unsigned shorts_firstdatazone; // 第一个数据逻辑块。 unsigned shorts_log_zone_size; // log(数据块数/逻辑块)。(以2为底)。 unsigned longs_max_size; // 文件最大长度。 unsigned shorts_magic; // 文件系统魔数。 };
文件数据结构如下所示:
// 文件结构(用于在文件句柄与i节点之间建立关系)
struct file {
unsigned shortf_mode; // 文件操作模式(RW位)
unsigned shortf_flags; // 文件打开和控制的标志。
unsigned shortf_count; // 对应文件引用计数值。
struct m_inode * f_inode; //
指向对应i节点。
off_t f_pos; //
文件位置(读写偏移值)。
};
// 这是在内存中的i节点结构。前7项与d_inode完全一样。
struct m_inode {
unsigned short i_mode; //
文件类型和属性(rwx位)。
unsigned shorti_uid; // 用户id(文件拥有者标识符)。
unsigned longi_size; // 文件大小(字节数)。
unsigned longi_mtime; // 修改时间(自1970.1.1:0算起,秒)。
unsigned chari_gid; // 组id(文件拥有者所在的组)。
unsigned chari_nlinks; // 文件目录项链接数。
unsigned shorti_zone[9]; // 直接(0-6)、间接(7)或双重间接(8)逻辑块号。
/* these are in memory also */
struct task_struct * i_wait; //
等待该i节点的进程。
struct task_struct * i_wait2;
/* forpipes */
unsigned longi_atime; // 最后访问时间。
unsigned long i_ctime; // i节点自身修改时间。
unsigned shorti_dev; // i节点所在的设备号。
unsigned shorti_num; // i节点号。
unsigned shorti_count; // i节点被使用的次数,0表示该i节点空闲。
unsigned chari_lock; // 锁定标志。
unsigned chari_dirt; // 已修改(脏)标志。
unsigned chari_pipe; // 管道标志。
unsigned chari_mount; // 安装标志。
unsigned chari_seek; // 搜寻标志(lseek时)。
unsigned chari_update; // 更新标志。
};
超级块是存储对应文件系统元数据的结构,存储的元数据包括包括文件系统大小,块大小, 以及空闲及已使用的块的数量inode表的大学及位置等消息.// 内存中磁盘超级块结构。 struct super_block { unsigned shorts_ninodes; // 节点数。 unsigned shorts_nzones; // 逻辑块数。 unsigned shorts_imap_blocks; // i节点位图所占用的数据块数。 unsigned shorts_zmap_blocks; // 逻辑块位图所占用的数据块数。 unsigned shorts_firstdatazone; // 第一个数据逻辑块号。 unsigned shorts_log_zone_size; // log(数据块数/逻辑块)。(以2为底)。 unsigned longs_max_size; // 文件最大长度。 unsigned shorts_magic; // 文件系统魔数。 /* These are only in memory */ struct buffer_he
4000
ad * s_imap[8]; // i节点位图缓冲块指针数组(占用8块,可表示64M)。 struct buffer_head * s_zmap[8]; // 逻辑块位图缓冲块指针数组(占用8块)。 unsigned shorts_dev; // 超级块所在的设备号。 struct m_inode * s_isup; // 被安装的文件系统根目录的i节点。(isup-superi) struct m_inode * s_imount; // 被安装到的i节点。 unsigned long s_time; // 修改时间。 struct task_struct * s_wait; // 等待该超级块的进程。 unsigned chars_lock; // 被锁定标志。 unsigned chars_rd_only; // 只读标志。 unsigned chars_dirt; // 已修改(脏)标志。 }; // 磁盘上超级块结构。上面125-132行完全一样。 struct d_super_block { unsigned shorts_ninodes; // 节点数。 unsigned shorts_nzones; // 逻辑块数。 unsigned shorts_imap_blocks; // i节点位图所占用的数据块数。 unsigned short s_zmap_blocks; // 逻辑块位图所占用的数据块数。 unsigned shorts_firstdatazone; // 第一个数据逻辑块。 unsigned shorts_log_zone_size; // log(数据块数/逻辑块)。(以2为底)。 unsigned longs_max_size; // 文件最大长度。 unsigned shorts_magic; // 文件系统魔数。 };
相关文章推荐
- Linux文件存储结构,目录项、inode、数据块
- Linux 内核文件系统关键数据结构
- linux虚拟文件系统数据结构
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
- 理解linux虚拟文件系统VFS - 数据结构
- linux虚拟文件系统VFS 的相关数据结构
- 大数据学习系列(1)-- linux之文件系统结构介绍
- 对某网站LINUX FSCK后丢失大量文件的数据恢复过程摘录
- 解读Linux文件系统的目录结构(转)
- 完美解读Linux文件系统的目录结构(附简明查阅手册)
- Linux 文件系统剖析-按照分层结构讨论 Linux 文件系统
- SQLserver数据文件(MDF)的页面文件头结构剖析
- zzLinux核心数据结构
- 元数据和 PE 文件结构
- linux内核文件结构和命令小结
- Linux编程常用的函数(十一) 系统数据文件和信息
- Linux误删数据文件的处理方法
- 简述Linux 文件系统的目录结构
- linux文件系统结构
- 简述Linux 文件系统的目录结构