int open(const char *path, int oflags, mode_t mode)
当oflags选择O_CREAT的时候,用到么mode 我看到的我的书上的mode用数字表示是5位,从左算起,第一位是设置用户的ID,第二位是设置组ID,后面三位分别表示:用户自己权限,组的权限,其他人的权限,
但是看到有的程序mode只有三位数字或者四位数字,这怎么理解呢,是不是只有三位的只表示出了用户自己权限,组的权限,其他人的权限,而用户的ID和组ID默认不写就是不设置呢?四位的又是省略了那个ID不设置的呢还是怎么回事呢?
open 函数中的mode
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 49
- 注册时间: 2009-03-12 16:29
- astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
Re: open 函数中的mode
准确的说mode是一个用来表示权限的整数。用八进制表示的时候可以写成AXYZ这种形式。在C语言里面八进制数前面要加0,就成了0AXYZ。
A是特殊权限,X是所属用户权限,Y是所属组权限,Z是其他用户权限。
每一类权限又可以细分为读(4)、写(2)、和执行(1)。
A的读/写权限实际上是在执行时将进程的用户/组ID设置为文件的用户/组ID。A的执行权限实际上是限制删除或附加标志。
如果只写成0XYZ,就表示A的值为0,也就是不设置任何特殊权限。
不过不建议使用数字常量,使用S_IRUSR之类的常量比较好。
A是特殊权限,X是所属用户权限,Y是所属组权限,Z是其他用户权限。
每一类权限又可以细分为读(4)、写(2)、和执行(1)。
A的读/写权限实际上是在执行时将进程的用户/组ID设置为文件的用户/组ID。A的执行权限实际上是限制删除或附加标志。
如果只写成0XYZ,就表示A的值为0,也就是不设置任何特殊权限。
不过不建议使用数字常量,使用S_IRUSR之类的常量比较好。
-
- 帖子: 49
- 注册时间: 2009-03-12 16:29