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

Source

  • 转到一个指定的目录下
  • 从用户态传入一个参数name
    • name:要转到的目录的路径名

3537

3538 chdir()

3539 {

3540     register *ip;

3541     extern uchar;

3542

3543     ip = namei(&uchar, 0);

  • 获取所要切换目录的INODE,赋给ip
3544     if(ip == NULL)

3545           return;

  • 若所要切换的目录不存在,直接返回
3546     if((ip->i_mode&IFMT) != IFDIR) {

3547           u.u_error = ENOTDIR;

3548     bad:

3549           iput(ip);

3550           return;

  • 此处为 当前用户对所找到的目录没有执行权限的 出错处理
    • 调用iput函数对INODE进行处理,然后返回
3551     }

3552     if(access(ip, IEXEC))

3553           goto bad;

  • 若当前用户对所找到的目录没有执行权限,则跳转至3548,进行出错处理
3554     iput(u.u_cdir);

3555     u.u_cdir = ip;

3556     prele(ip);

  • 若通过了执行权限检查
    • 将当前目录INODE的勾连数-1
    • 将当前目录INODE 置为ip(指定目录的INODE)
    • 解锁INODE(调用namei时被置锁)
3557 }

3558 /* ------------------------- */

Ref

Param

(chdir = 12.)
sys chdir; dirname
⚠️ **GitHub.com Fallback** ⚠️