Movatterモバイル変換


[0]ホーム

URL:


chmod函数

最新推荐文章于 2025-08-06 21:21:58 发布
原创最新推荐文章于 2025-08-06 21:21:58 发布·3.7k 阅读
· 0
· 2·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
文章标签:

#path

chmod函数的定义:
#include
#include
int chmod(const char *path, mode_t mode)
关于mode_t的定义:
#ifndef __mode_t_defined
typedef __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)。

确定要放弃本次机会?
福利倒计时
::

立减 ¥

普通VIP年卡可用
立即使用
参与评论您还未登录,请先登录后发表或查看评论

博客等级

码龄17年
71
原创
7
点赞
52
收藏
25
粉丝
关注
私信

热门文章

分类专栏

上一篇:
Linux信号列表
下一篇:
Snort分析报告

最新评论

大家在看

最新文章

目录

展开全部

收起

目录

展开全部

收起

上一篇:
Linux信号列表
下一篇:
Snort分析报告

目录

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
被折叠的  条评论为什么被折叠?到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

[8]ページ先頭

©2009-2025 Movatter.jp