前言
前文对 Linux 中的权限进行了较为透彻的分析。而本文,则在前文的基础上,具体说明如何在代码中进行权限控制。
下面的代码涉及到以下几个方面:
1. 创建文件时设置文件权限
2. 修改文件的默认权限
3. 修改已创建文件的权限
在阅读具体实现代码前,请先大致了解如下权限宏。
Linux 中的权限宏
代码实现
1 #include "apue.h" 2 #include <fcntl.h> 3 4 #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) 5 6 int 7 main(void) 8 { 9 struct stat statbuf; 10 umask(0); 11 12 // 按照宏 RWRWRW 指定的权限创建文件 13 if (creat("foo", RWRWRW) < 0) 14 err_sys("creat error for foo"); 15 // 修改默认权限 - 屏蔽掉创建文件的组读写和其他用户读写权限 16 umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); 17 if (creat("bar", RWRWRW) < 0) 18 err_sys("creat error for bar"); 19 20 // 获取文件权限信息 21 if (stat("foo", &statbuf) < 0) 22 err_sys("stat err for foo"); 23 // 在文件原来的权限信息的基础上,进行增加/删除权限。 24 // 下面的示例删除了组执行权限并增加了设置组ID位。 25 if (chmod("foo", (statbuf.st_mode & ~S_IWGRP) | S_ISGID) < 0) 26 err_sys("chmod err for foo"); 27 exit(0); 28 }
运行测试
运行程序后,查看 foo 文件的权限,与预计相符:
小结
Linux中设置状态位的方法大概都是用宏指定;删除状态位语法为原来的状态位 &~ 宏;增加状态位语法为原来的状态位 | 宏。