UNIX环境高级编程第四章

前面的还好,到4.9节卡住了。开始记录一下

1.4.9chmod和fchmod

[1]作用:更改现有文件的访问权限。二者区别在于fchmod只能对已打开的文件进行操作。

形式:int chmod(const char *pathname, mode_t mode);

        int fchmod(int filedes, mode_t mode);

参数mode在原来的用户组其他读写操作,9个文件访问权限符的基础上,增加了新的6个。

S_IRWXU:是S_ISRUSE,S_ISWUSE,S_ISXUSE(用户读写操作)三者综合,

S_ISWXG:是S_ISRGRP,S_ISWGRP,S_ISXGRP(组读写操作)三者综合,

S_ISWXO:是S_ISROTH,S_ISWOTH,S_ISXOTH(其他读写操作)三者综合。

设置ID常量:

S_ISUID:执行时设置用户ID

S_ISGID:执行时设置组ID

保存正文常量:

S_IRWXO:保存征文(粘住位)

首先用stat获取当前权限,然后用chmod修改权限。

chmod("foo", (statbuf.st_mode & `S_IXGRP | S_ISGID) <0)

err_sys("chmod error for foo");

更改foo权限,去掉组的操作权限加上S_ISGID权限,设置之后组将以root身份执行,但是问题是想设置s文件属组设置GUID必选要先设置组执行操作为真,不然S_ISGID不能真正生效,不生效该位将变为大写S。如图所示。

s位变为小写,奏效了。

[2]关于chmod函数自动清除两个权限位的两种情况:

  1.

  2.文件的用户ID就是创建文件的进程有效用户ID。但是组ID,可以是进程的有效组ID(优先度低);也可以是目录本身的组ID(优先度高),这种情况下如果进程没有超级用户权限,那么为了防止文件设置设置组ID文件

先不写了 = =

posted @ 2016-12-15 16:13  尹盛  阅读(270)  评论(0)    收藏  举报