code:chdir - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- 转到一个指定的目录下
- 从用户态传入一个参数name
- name:要转到的目录的路径名
3537
3538 chdir()
3539 {
3540 register *ip;
3541 extern uchar;
3542
3544 if(ip == NULL)
- 获取所要切换目录的INODE,赋给ip
3545 return;
3546 if((ip->i_mode&IFMT) != IFDIR) {
- 若所要切换的目录不存在,直接返回
3547 u.u_error = ENOTDIR;
3548 bad:
- 若所找到的INODE不是一个目录文件,则跑出错误
- 错误代码:ENOTDIR
- 用法参看 文件系统#inode类型
3550 return;
3551 }
- 此处为 当前用户对所找到的目录没有执行权限的 出错处理
- 调用iput函数对INODE进行处理,然后返回
3553 goto bad;
3554 iput(u.u_cdir);
- 若当前用户对所找到的目录没有执行权限,则跳转至3548,进行出错处理
3557 }
- 若通过了执行权限检查
- 将当前目录INODE的勾连数-1
- 将当前目录INODE 置为ip(指定目录的INODE)
- 解锁INODE(调用namei时被置锁)
3558 /* ------------------------- */
- (chdir = 12.)
- sys chdir; dirname