code:stat1 - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
6040
- INODE结构共有两个部分,两者有不同的部分
- 内存INODE
- 磁盘INODE
- 从两个部分分别读出需要的状态,写入指定地址
6041 /*
6042 * The basic routine for fstat and stat:
6043 * get the inode and pass appropriate parts back.
6044 */
6045 stat1(ip, ub)
6046 int ip;
6047 {
6048 register i, *bp, *cp;
6049
6051 bp = bread(ip->i_dev, ldiv(ip->i_number+31, 16));
- 将 内存INODE 写回 磁盘
6052 cp = bp->b_addr + 32*lrem(ip->i_number+31, 16) +24;
- 读出 ip所在对应的磁盘块bp
6053 ip = &(ip->i_dev);
- cp ← 指向 bp上对应ip的INODE的i_atime项
6054 for(i=0; i<14; i++) {
- ip ← 指向原ip的i_dev项
6056 ub =+ 2;
6057 }
6058 for(i=0; i<4; i++) {
- 将以下内容写入用户态地址空间ub地址,ip的
- i_dev
- i_number
- i_mode
- i_nlink
- i_uid
- i_gid
- i_size0
- i_size1
- i_addr[8]
6059 suword(ub, *cp++);
6060 ub =+ 2;
6061 }
6062 brelse(bp);
- 将以下内容写入用户态地址空间ub地址,ip对应的磁盘inode的
- i_atime
- i_mtime
6063 }
- 释放 bp
6064 /* ------------------------- */