code:openi - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • "打开" 指定INODE
    • 对于 普通INODE,不做操作
    • 对于 设备装载INODE,打开设备(d_open())
  • 参考 文件系统#装载文件系统
  • 传入2个参数
    • ip : 指向指定的INODE
    • rw : 读写模式,模式常量参看file.h
      • 读写模式只在调用 d_open()时使用,含义不明,列入遗留问题

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) {

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;

6725

6726 bad:

6727     u.u_error = ENXIO;

6728 }

6729 /* ------------------------- */

Ref

Caller

⚠️ **GitHub.com Fallback** ⚠️