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

Source

  • 改变文件的拥有者和拥有组
  • 传入两个参数
    • 参数1:name 文件或者目录路径名
    • 参数2:owner 低八位为文件拥有者,高八位为文件的拥有组

3574

3575 chown()

3576 {

3577     register *ip;

3578

3579     if (!suser() || (ip = owner()) == NULL)

3580           return;

  • 若当前用户不是超级用户或者不是当前文件的拥有者或者由name指示的INODE不存在
    • 直接返回
  • 否则
    • ip = 文件名为name的INODE
3581     ip->i_uid = u.u_arg[1].lobyte;

3582     ip->i_gid = u.u_arg[1].hibyte;

3583     ip->i_flag =| IUPD;

  • ip->i_uid = owner的低8位(文件拥有者)
  • ip->i_gid = owner的高8位(文件拥有组)
  • 置IUPD标志
3584     iput(ip);
  • 调用iput对ip进行i_count减1操作,这是因为在3579行调用owner时间接调用了namei,使得i_count加了1
3585 }

3586 /* ------------------------- */

Ref

Param

(chmod = 16.)
sys chown; name; owner
⚠️ **GitHub.com Fallback** ⚠️