chmod函数中的mode_t参数
来源:互联网 发布:淘宝天猫运营工作内容 编辑:程序博客网 时间:2024/06/05 02:19
chmod函数的定义:
#include <sys/types.h>#include <sys/stat.h>int chmod(const char *path, mode_t mode)关于mode_t的定义:#ifndef __mode_t_definedtypedef __mode_t mode_t;# define __mode_t_defined#endif__mode_t的定义:#define __mode_t __MODE_T_TYPE#define __MODE_T_TYPE __U32_TYPE#define __U32_TYPE unsigned int
可以看到mode_t的定义实际就是unsigned int形式的。
但是函数chmod(const char *path, mode_t mode)在解释mode_t时是将这里的mode当成8进制的去解释。
参数 mode 有下列数种组合
S_ISUID 04000 文件的(set user-id on execution)位
S_ISGID 02000 文件的(set group-id on execution)位
S_ISVTX 01000 文件的sticky位
S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限
S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限
S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限
比如要将文件test的权限修改为644,那么可以采用以下几种方法:
chmod(“test”, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
chmod(“test”, 0644);
chmod(“test”, 420);
第一种方法是将00400和00200和00040和00004进行或运算,最终得到的结果就是0644(八进制),而八进制的0644就等于十进制的420。所以上面三种方法是等效的。
当我们给chmod函数传递参数时他会将对应的十进制的mode参数转换为相应的八进制进行运算。所以我们要将test文件的权限改为644时传递给函数chmod的参数不能直接是644。而应该是420。这是因为十进制的420就等于八进制的644。
但是我们使用chmod命令时却可以直接输入644。具体的chmod实现时我认为是将644接收后(接收时可能是以字符串形式接收)认为644是八进制的数据,然后将644转换为对应的十进制,然后直接传递给函数chmod(const char *path, mode_t mode)。
转载:http://blog.chinaunix.net/uid-20753645-id-1877868.html
- chmod函数中的mode_t参数
- chmod函数中的mode_t参数
- chmod函数中的mode_t参数
- chmod函数中的mode_t参数
- mkdir()函数、mode_t参数
- mode_t
- linux中open()函数的mode_t 含义
- linux中open()函数的mode_t 含义
- chmod函数
- 详细对比C语言中的chmod()函数和fchmod()函数
- open函数中mode_t与默认文件权限关系
- linux open函数的 mode_t涵义(转)
- 系统编程中的文件权限相关--access/chmod/chown函数
- linux chmod 参数解析
- as3 中的函数参数
- 函数参数中的&符号
- Python函数参数中的*,**
- perl中的函数参数
- 5-22 龟兔赛跑 (20分)
- 【线段树】BZOJ1012 [JSOI2008]最大数maxnumber
- NFS的那些事儿
- 数据类型转化
- 括号正确嵌套问题的实现(Java)
- chmod函数中的mode_t参数
- CCF 历年真题之画图(_1409_2_Drawing.java)参考答案
- jenkins 与CI集成
- SpringMVC(一)—环境搭建和实现静态资源的访问
- 程序菜鸡的目标与梦想
- Java集合类详解
- 《剑指offer》左旋转字符串
- 5-22 龟兔赛跑 (20分)(睡觉计时器,抄的)
- 让web app更快的HTML5最佳实践