sturct stat 结构体中 st_mode 的含义
来源:互联网 发布:淘宝女装天天特卖 编辑:程序博客网 时间:2024/04/29 06:07
在<sys/stat.h>中定义的stat结构体内容如下:
本文着眼于st_mode成员,该成员描述了文件的类型和权限两个属性。
st_mode是个32位的整型变量,不过现在的linux操作系统只用了低16位(估计是鉴于以后拓展的考虑)。
===============================================================================================================
先看File type属性区域,位于bit12 ~ bit15.
在现代linux操作系统上文件类型共分为7种,分别是:
普通文件(regular file)
目录(directory)
字符设备(character device)
块设备(block device)
管道(FIFO<pipe>)
符号链接文件(symbolic link)
套接口文件(socket)
所以File type属性只需3bit就够了,估计也是考虑到了以后的扩展问题。
在<sys/stat.h>中有如下定义:
首先S_IFMT是一个掩码,它的值是017000(注意这里用的是八进制), 可以用来过滤出前四位表示的文件类型。
其后的连续七个分别对应套接口文件、符号链接文件、普通文件、块设备、目录、字符设备、管道,它们分别对应一个不同的值。
现在假设我们要判断一个文件是不是目录,我们怎么做呢?
很简单,首先通过掩码S_IFMT把其他无关的部分置0,再与表示目录的数值比较,从而判断这是否是一个目录,下面的代码:
为了简便操作,<sys/stat.h>中提供了宏来代替上述代码,所以如果需要判断文件是不是目录就可以这样:
===============================================================================================================
接着来看Permission属性区域的bit0~bit8,也即st_mode字段的最低9位,代表文件的许可权限,它标识了文件所有者(owner)、组用户(group)、其他用户(other)的读(r)、写(w)、执行(x)权限。
在<sys/stat.h>有如下定义:
程序中可以自由组合使用它们。
值得一提的是,目录的权限与普通文件的权限是不同的。目录的读、写、执行权限含义分别如下:
(1)读权限。读权限允许我们通过opendir()函数读取目录,进而可以通过readdir()函数获得目录内容,即目录下的文件列表。
(2)写权限。写权限代表的是可在目录内创建、删除文件,而不是指的写目录本身。
(3)执行权限。可访问目录中的文件。
===============================================================================================================
最后来看Permission属性区域的bit9 ~ bit11,这三个bit比较特殊,代表文件的特殊属性,分别为set-user-ID位、set-group-ID位和sticky位,下面一一介绍每个位的含义。
转自:http://blog.csdn.net/astrotycoon/article/details/8679676
- sturct stat 结构体中 st_mode 的含义
- sturct stat 结构体中 st_mode 的含义
- sturct stat 结构体中 st_mode 的含义
- sturct stat 结构体中 st_mode 的含义
- sturct stat 结构体中 st_mode 的含义
- sturct stat 结构体中 st_mode 的含义
- struct stat结构体中st_mode参数的含义
- 13-stat 结构体 st_mode 字段
- linux中stat()函数与st_mode用法
- linux进程查看中STAT的含义
- linux进程查看中STAT的含义
- ps 命令中stat字段的含义
- sturct的一些写法 收集中。。。
- C++中sturct和class的区别
- 用宏定义FIND求一个结构体里某个变量相对于sturct的偏移量
- netstat -an中stat含义
- stat命令输出结果中, Access,Modify,Change的含义
- 结构体中冒号的含义
- mysql主从配置
- Javascript模块化编程(三):require.js的用法
- 内存压力测试工具Memtester
- rsync+inotify实现实时同步案例
- c语言之队列结构
- sturct stat 结构体中 st_mode 的含义
- Laravel5.4的数据库迁移报错
- python解释器实现及其嵌入式应用:1到6章总结
- 在Android开发过程中搭建一个自己的应用框架有几个步骤?需要注意什么?
- 深入理解Java虚拟机笔记(一)
- 金字塔原理
- FMDB的简单实用
- CentOS网络配置详解
- 初中学生学习方法