open 函数的mode参数通过八进制数来表示的原理是什么?


首先说一下open函数是什么吧,open函数是在linux中定义的用来打开一个文件的函数,其函数原型是这个样子:

其中第三个参数可有可没有!当flags中含有O_CREAT这个参数的时候,必须有第三个参数,第三个参数用来表明创建的文件的权限!那么它是如何表示权限的呢?

    首先来看mode_t这个类型,我的系统是32位的,在我的系统中定义的是一个无符号整型,它表示权限的方法如下(前面省略了16个0):

   

    从低往上,每三位为一组,分别表示其他人,组,用户,还有特殊权限(SUID权值为4,SGID权值为2,sticky bit权值为1)。

    比如如果我们输入一个0664,表示的就是0000 000 110 110 100,等价于-rw-rw-r--。

    那如果我想要加入特殊权限该怎么做呢,很简单啊,变成相应数值就好!比如我想设置一个-rwsr-xr-x的权限,先变成二进制,就是0000 100 111 101 101,然后变成八进制,04755,这样直接设置就好了!

    最后来举个例子吧,在这个例子中我通过十进制来设置权限值,大家可以看到和八进制的方法作用是相同的!

    比如我想创建一个权限为-rw-r--r--的文件,那么它的二进制值就是0000 000 110 100 100,变成十进制就是420,然后我写了个程序如下:

#include<stdio.h>
#include<errno.h>
#include<fcntl.h>
#include<sys/stat.h>
#define FLAGS O_CREAT | O_RDWR | O_TRUNC
int main(int argc,char *argv[])
{
    int pfd;

    if((pfd=open("decimal",FLAGS,420)) == -1)    //注意我这里设置权限值用的是十进制
        perror(argv[0]);
    close(pfd);

    return 0;
}

然后运行结果如下:

注意那个decimal是我最后创建的文件!




  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值