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

Source

  • "释放" 指定 struct file 结构 fp
    • 若fp是管道,做相应操作
    • 若释放的是fp的最后一个引用,则释放fp对应inode

6634

6635 /*

6636  * Internal form of close.

6637  * Decrement reference count on

6638  * file structure and call closei

6639  * on last closef.

6640  * Also make sure the pipe protocol

6641  * does not constipate.

6642  */

6643 closef(fp)

6644 int *fp;

6645 {

6646     register *rfp, *ip;

6647

6648     rfp = fp;

6649     if(rfp->f_flag&FPIPE) {

6650          ip = rfp->f_inode;

6651          ip->i_mode =& ~(IREAD|IWRITE);

6652          wakeup(ip+1);

6653          wakeup(ip+2);

6654     }

6655     if(rfp->f_count <= 1)

6656          closei(rfp->f_inode, rfp->f_flag&FWRITE);

  • 若释放的是fp的最后一个引用,则释放fp对应inode
  • 关于 为什么 标志位赋 &FWRITE ,并不清楚,列入遗留问题
6657     rfp->f_count--;

6658 }

6659 /* ------------------------- */

Ref

Caller

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