code:chmod - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
- chmod 系统调用 的 实现函数
- 改变指定文件或目录的访问权限
- 从用户态传入2个参数
- 参数1: name ,文件或目录的路径名 -> u.u_arg[0]
- 参数2: mode ,希望变成的访问模式 -> u.u_arg[1]
3559
3560 chmod()
3561 {
3562 register *ip;
3563
3564 if ((ip = owner()) == NULL)
3565 return;
3566 ip->i_mode =& ~07777;
- 检查当前用户是否是文件的拥有者或者是超级用户
- 若不是或者无法根据name指示的路径找到相应INODE,直接返回
- 否则,ip=通过name得到的INODE
3567 if (u.u_uid)
- 将ip->i_mode的最后12位(与访问权限有关的位)清空
3568 u.u_arg[1] =& ~ISVTX;
3569 ip->i_mode =| u.u_arg[1]&07777;
- 若当前用户不是超级用户
- 清除传入参数mode中的ISVTX标志,参看inode.h
3570 ip->i_flag =| IUPD;
- 将传入的参数mode的后12位赋给ip->i_mode
3572 }
- ip->i_flag置上IUPD标志,表明该INODE被修改过
- 调用iput使ip->i_count -1,(抵消3564调用owner时间接调用namei而 导致的ip->i_count +1)
3573 /* ------------------------- */
- (chmod = 15.)
- sys chmod; name; mode