open 函数中的mode

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
hanyu
帖子: 49
注册时间: 2009-03-12 16:29

open 函数中的mode

#1

帖子 hanyu » 2009-05-23 16:37

int open(const char *path, int oflags, mode_t mode)
当oflags选择O_CREAT的时候,用到么mode 我看到的我的书上的mode用数字表示是5位,从左算起,第一位是设置用户的ID,第二位是设置组ID,后面三位分别表示:用户自己权限,组的权限,其他人的权限,
但是看到有的程序mode只有三位数字或者四位数字,这怎么理解呢,是不是只有三位的只表示出了用户自己权限,组的权限,其他人的权限,而用户的ID和组ID默认不写就是不设置呢?四位的又是省略了那个ID不设置的呢还是怎么回事呢?
头像
astolia
论坛版主
帖子: 6703
注册时间: 2008-09-18 13:11

Re: open 函数中的mode

#2

帖子 astolia » 2009-05-23 17:26

准确的说mode是一个用来表示权限的整数。用八进制表示的时候可以写成AXYZ这种形式。在C语言里面八进制数前面要加0,就成了0AXYZ。
A是特殊权限,X是所属用户权限,Y是所属组权限,Z是其他用户权限。
每一类权限又可以细分为读(4)、写(2)、和执行(1)。
A的读/写权限实际上是在执行时将进程的用户/组ID设置为文件的用户/组ID。A的执行权限实际上是限制删除或附加标志。
如果只写成0XYZ,就表示A的值为0,也就是不设置任何特殊权限。

不过不建议使用数字常量,使用S_IRUSR之类的常量比较好。
hanyu
帖子: 49
注册时间: 2009-03-12 16:29

Re: open 函数中的mode

#3

帖子 hanyu » 2009-05-23 19:22

谢谢了
回复