📄 31.html
字号:
<a name='L85'><b>typedef</b> <b>char</b> buffer_block[<a href='../R/8.html' title='Multiple refered from 26 places.'>BLOCK_SIZE</a>]; <i><font color='green'>// 块缓冲区。</font></i>
<a name='L86'>
<a name='L87'><i><font color='green'>// 缓冲区头数据结构。(极为重要!!!)</font></i>
<a name='L88'><i><font color='green'>// 在程序中常用bh 来表示buffer_head 类型的缩写。</font></i>
<a name='L89'><b>struct</b> buffer_head
<a name='L90'><font color='red'>{</font>
<a name='L91'> <b>char</b> *b_data; <i><font color='green'>/* pointer to data block (1024 bytes) */</font></i><i><font color='green'>//指针。</font></i>
<a name='L92'> <b>unsigned</b> <b>long</b> b_blocknr; <i><font color='green'>/* block number */</font></i><i><font color='green'>// 块号。</font></i>
<a name='L93'> <b>unsigned</b> <b>short</b> b_dev; <i><font color='green'>/* device (0 = free) */</font></i><i><font color='green'>// 数据源的设备号。</font></i>
<a name='L94'> <b>unsigned</b> <b>char</b> b_uptodate; <i><font color='green'>// 更新标志:表示数据是否已更新。</font></i>
<a name='L95'> <b>unsigned</b> <b>char</b> b_dirt; <i><font color='green'>/* 0-clean,1-dirty */</font></i><i><font color='green'>//修改标志:0 未修改,1 已修改.</font></i>
<a name='L96'> <b>unsigned</b> <b>char</b> b_count; <i><font color='green'>/* users using this block */</font></i><i><font color='green'>// 使用的用户数。</font></i>
<a name='L97'> <b>unsigned</b> <b>char</b> b_lock; <i><font color='green'>/* 0 - ok, 1 -locked */</font></i><i><font color='green'>// 缓冲区是否被锁定。</font></i>
<a name='L98'> <b>struct</b> task_struct *b_wait; <i><font color='green'>// 指向等待该缓冲区解锁的任务。</font></i>
<a name='L99'> <b>struct</b> buffer_head *b_prev; <i><font color='green'>// hash 队列上前一块(这四个指针用于缓冲区的管理)。</font></i>
<a name='L100'> <b>struct</b> buffer_head *b_next; <i><font color='green'>// hash 队列上下一块。</font></i>
<a name='L101'> <b>struct</b> buffer_head *b_prev_free; <i><font color='green'>// 空闲表上前一块。</font></i>
<a name='L102'> <b>struct</b> buffer_head *b_next_free; <i><font color='green'>// 空闲表上下一块。</font></i>
<a name='L103'><font color='red'>}</font>;
<a name='L104'>
<a name='L105'><i><font color='green'>// 磁盘上的索引节点(i 节点)数据结构。</font></i>
<a name='L106'><b>struct</b> d_inode
<a name='L107'><font color='red'>{</font>
<a name='L108'> <b>unsigned</b> <b>short</b> i_mode; <i><font color='green'>// 文件类型和属性(rwx 位)。</font></i>
<a name='L109'> <b>unsigned</b> <b>short</b> i_uid; <i><font color='green'>// 用户id(文件拥有者标识符)。</font></i>
<a name='L110'> <b>unsigned</b> <b>long</b> i_size; <i><font color='green'>// 文件大小(字节数)。</font></i>
<a name='L111'> <b>unsigned</b> <b>long</b> i_time; <i><font color='green'>// 修改时间(自1970.1.1:0 算起,秒)。</font></i>
<a name='L112'> <b>unsigned</b> <b>char</b> i_gid; <i><font color='green'>// 组id(文件拥有者所在的组)。</font></i>
<a name='L113'> <b>unsigned</b> <b>char</b> i_nlinks; <i><font color='green'>// 链接数(多少个文件目录项指向该i 节点)。</font></i>
<a name='L114'> <b>unsigned</b> <b>short</b> i_zone[9]; <i><font color='green'>// 直接(0-6)、间接(7)或双重间接(8)逻辑块号。</font></i>
<a name='L115'><i><font color='green'>// zone 是区的意思,可译成区段,或逻辑块。</font></i>
<a name='L116'><font color='red'>}</font>;
<a name='L117'>
<a name='L118'><i><font color='green'>// 这是在内存中的i 节点结构。前7 项与d_inode 完全一样。</font></i>
<a name='L119'><b>struct</b> m_inode
<a name='L120'><font color='red'>{</font>
<a name='L121'> <b>unsigned</b> <b>short</b> i_mode; <i><font color='green'>// 文件类型和属性(rwx 位)。</font></i>
<a name='L122'> <b>unsigned</b> <b>short</b> i_uid; <i><font color='green'>// 用户id(文件拥有者标识符)。</font></i>
<a name='L123'> <b>unsigned</b> <b>long</b> i_size; <i><font color='green'>// 文件大小(字节数)。</font></i>
<a name='L124'> <b>unsigned</b> <b>long</b> i_mtime; <i><font color='green'>// 修改时间(自1970.1.1:0 算起,秒)。</font></i>
<a name='L125'> <b>unsigned</b> <b>char</b> i_gid; <i><font color='green'>// 组id(文件拥有者所在的组)。</font></i>
<a name='L126'> <b>unsigned</b> <b>char</b> i_nlinks; <i><font color='green'>// 文件目录项链接数。</font></i>
<a name='L127'> <b>unsigned</b> <b>short</b> i_zone[9]; <i><font color='green'>// 直接(0-6)、间接(7)或双重间接(8)逻辑块号。</font></i>
<a name='L128'><i><font color='green'>/* these are in memory also */</font></i>
<a name='L129'> <b>struct</b> task_struct *i_wait; <i><font color='green'>// 等待该i 节点的进程。</font></i>
<a name='L130'> <b>unsigned</b> <b>long</b> i_atime; <i><font color='green'>// 最后访问时间。</font></i>
<a name='L131'> <b>unsigned</b> <b>long</b> i_ctime; <i><font color='green'>// i 节点自身修改时间。</font></i>
<a name='L132'> <b>unsigned</b> <b>short</b> i_dev; <i><font color='green'>// i 节点所在的设备号。</font></i>
<a name='L133'> <b>unsigned</b> <b>short</b> i_num; <i><font color='green'>// i 节点号。</font></i>
<a name='L134'> <b>unsigned</b> <b>short</b> i_count; <i><font color='green'>// i 节点被使用的次数,0 表示该i 节点空闲。</font></i>
<a name='L135'> <b>unsigned</b> <b>char</b> i_lock; <i><font color='green'>// 锁定标志。</font></i>
<a name='L136'> <b>unsigned</b> <b>char</b> i_dirt; <i><font color='green'>// 已修改(脏)标志。</font></i>
<a name='L137'> <b>unsigned</b> <b>char</b> i_pipe; <i><font color='green'>// 管道标志。</font></i>
<a name='L138'> <b>unsigned</b> <b>char</b> i_mount; <i><font color='green'>// 安装标志。</font></i>
<a name='L139'> <b>unsigned</b> <b>char</b> i_seek; <i><font color='green'>// 搜寻标志(lseek 时)。</font></i>
<a name='L140'> <b>unsigned</b> <b>char</b> i_update; <i><font color='green'>// 更新标志。</font></i>
<a name='L141'><font color='red'>}</font>;
<a name='L142'>
<a name='L143'><i><font color='green'>// 文件结构(用于在文件句柄与i 节点之间建立关系)</font></i>
<a name='L144'><b>struct</b> file
<a name='L145'><font color='red'>{</font>
<a name='L146'> <b>unsigned</b> <b>short</b> f_mode; <i><font color='green'>// 文件操作模式(RW 位)</font></i>
<a name='L147'> <b>unsigned</b> <b>short</b> f_flags; <i><font color='green'>// 文件打开和控制的标志。</font></i>
<a name='L148'> <b>unsigned</b> <b>short</b> f_count; <i><font color='green'>// 对应文件句柄(文件描述符)数。</font></i>
<a name='L149'> <b>struct</b> m_inode *f_inode; <i><font color='green'>// 指向对应i 节点。</font></i>
<a name='L150'> <a href='../S/45.html#L32' title='Defined at 32 in include/sys/types.h.'>off_t</a> f_pos; <i><font color='green'>// 文件位置(读写偏移值)。</font></i>
<a name='L151'><font color='red'>}</font>;
<a name='L152'>
<a name='L153'><i><font color='green'>// 内存中磁盘超级块结构。</font></i>
<a name='L154'><b>struct</b> super_block
<a name='L155'><font color='red'>{</font>
<a name='L156'> <b>unsigned</b> <b>short</b> s_ninodes; <i><font color='green'>// 节点数。</font></i>
<a name='L157'> <b>unsigned</b> <b>short</b> s_nzones; <i><font color='green'>// 逻辑块数。</font></i>
<a name='L158'> <b>unsigned</b> <b>short</b> s_imap_blocks; <i><font color='green'>// i 节点位图所占用的数据块数。</font></i>
<a name='L159'> <b>unsigned</b> <b>short</b> s_zmap_blocks; <i><font color='green'>// 逻辑块位图所占用的数据块数。</font></i>
<a name='L160'> <b>unsigned</b> <b>short</b> s_firstdatazone; <i><font color='green'>// 第一个数据逻辑块号。</font></i>
<a name='L161'> <b>unsigned</b> <b>short</b> s_log_zone_size; <i><font color='green'>// log(数据块数/逻辑块)。(以2 为底)。</font></i>
<a name='L162'> <b>unsigned</b> <b>long</b> s_max_size; <i><font color='green'>// 文件最大长度。</font></i>
<a name='L163'> <b>unsigned</b> <b>short</b> s_magic; <i><font color='green'>// 文件系统魔数。</font></i>
<a name='L164'><i><font color='green'>/* These are only in memory */</font></i>
<a name='L165'> <b>struct</b> buffer_head *s_imap[8]; <i><font color='green'>// i 节点位图缓冲块指针数组(占用8 块,可表示64M)。</font></i>
<a name='L166'> <b>struct</b> buffer_head *s_zmap[8]; <i><font color='green'>// 逻辑块位图缓冲块指针数组(占用8 块)。</font></i>
<a name='L167'> <b>unsigned</b> <b>short</b> s_dev; <i><font color='green'>// 超级块所在的设备号。</font></i>
<a name='L168'> <b>struct</b> m_inode *s_isup; <i><font color='green'>// 被安装的文件系统根目录的i 节点。(isup-super i)</font></i>
<a name='L169'> <b>struct</b> m_inode *s_imount; <i><font color='green'>// 被安装到的i 节点。</font></i>
<a name='L170'> <b>unsigned</b> <b>long</b> s_time; <i><font color='green'>// 修改时间。</font></i>
<a name='L171'> <b>struct</b> task_struct *s_wait; <i><font color='green'>// 等待该超级块的进程。</font></i>
<a name='L172'> <b>unsigned</b> <b>char</b> s_lock; <i><font color='green'>// 被锁定标志。</font></i>
<a name='L173'> <b>unsigned</b> <b>char</b> s_rd_only; <i><font color='green'>// 只读标志。</font></i>
<a name='L174'> <b>unsigned</b> <b>char</b> s_dirt; <i><font color='green'>// 已修改(脏)标志。</font></i>
<a name='L175'><font color='red'>}</font>;
<a name='L176'>
<a name='L177'><i><font color='green'>// 磁盘上超级块结构。上面125-132 行完全一样。</font></i>
<a name='L178'><b>struct</b> d_super_block
<a name='L179'><font color='red'>{</font>
<a name='L180'> <b>unsigned</b> <b>short</b> s_ninodes; <i><font color='green'>// 节点数。</font></i>
<a name='L181'> <b>unsigned</b> <b>short</b> s_nzones; <i><font color='green'>// 逻辑块数。</font></i>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -