code:openi - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- "打开" 指定INODE
- 对于 普通INODE,不做操作
- 对于 设备装载INODE,打开设备(d_open())
- 参考 文件系统#装载文件系统
- 传入2个参数
6694
6695 /*
6696 * openi called to allow handler
6697 * of special files to initialize and
6698 * validate before actual IO.
6699 * Called on all sorts of opens
6700 * and also on mount.
6701 */
6702 openi(ip, rw)
6703 int *ip;
6704 {
6705 register *rip;
6706 register dev, maj;
6707
6708 rip = ip;
6709 dev = rip->i_addr[0];
6710 maj = rip->i_addr[0].d_major;
6711 switch(rip->i_mode&IFMT) {
- dev ← 设备号
- maj ← 主设备号
- 参看文件系统#装载文件系统
6712
6713 case IFCHR:
6714 if(maj >= nchrdev)
6715 goto bad;
6716 (*cdevsw[maj].d_open)(dev, rw);
6717 break;
6718
6719 case IFBLK:
6720 if(maj >= nblkdev)
6721 goto bad;
6722 (*bdevsw[maj].d_open)(dev, rw);
6723 }
6724 return;
- 打开相应设备
- 6711 的用法 参看 文件系统#inode类型
6725
6726 bad:
6727 u.u_error = ENXIO;
6728 }
- 若 主设备号越界,抛出错误
- 错误代码 : ENXIO
6729 /* ------------------------- */