学linux 的应用编程就是学linux 的API
API 就是解决我们遇到的问题
3.2.4.文件权限管理1
3.2.4.1、st_mode中记录的文件权限位
(1)st_mode本质上是一个32位的数(类型就是unsinged int),这个数里的每一个位表示一个含义。
(2)文件类型和文件的权限都记录在st_mode中。我们用的时候使用专门的掩码去取出相应的位即可得知相应的信息。
3.2.4.2、ls -l打印出的权限列表
(1)123456789一共9位,3个一组"rwx"。第一组三个表示文件的属主(owner、user)对该文件的可读、可写、可执行权限;第2组3个位表示文件的属主所在的组(group)对该文件的权限;第3组3个位表示其他用户(others)对该文件的权限。
(2)属主(宿主)就是这个文件属于谁,一般来说文件创建时属主就是创建这个文件的那个用户。但是我们一个文件创建之后还可以用chown命令去修改一个文件的属主,还可以用chgrp命令去修改一个文件所在的组。
3.2.4.3、文件操作时的权限检查规则
(1)一个程序a.out被执行,a.out中试图去操作一个文件1.txt,这时候如何判定a.out是否具有对1.txt的某种操作权限呢?
(2)判定方法是:首先1.txt具有9个权限位,规定了3种人(user、group、others)对该文件的操作权限。所以我们判定1.txt是否能被a.out来操作,关键先搞清楚a.out对1.txt到底算哪种人。准确的说是看a.out被谁执行,也就是当前程序(进程)是哪个用户的进程。
(3)刚才上面说的是我的分析,到底对不对还得验证。
实例:
#include "stdio.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#define NAME "1.txt"
int main(void)
{
int ret = -1;
ret = open(NAME, O_RDONLY); // O_RDONLY 只读权限
if(ret > 0)
{
printf("可读 ");
close(ret);
}
else{ perror("read"); }
ret = open(NAME, O_WRONLY); // O_RDONLY 只写权限
if(ret > 0)
{
printf("可写 ");
close(ret);
}
else{ perror("write"); }
return 0;
}
一定要在root 用户下,在重新 编译一下 3.2.4.c
在 切换到 su aston 用户
执行 1.txt 和 2.txt
2. 在root 用户下都是 不管文件是可读还是可写 ! 结果都是可读可写
这个与上面的 所在 组权限
第2组3个位表示文件的属主所在的组(group)对该文件的权限 !我不太理解
3. 创建一个其他用户 : tmpuser 用户
总结:
a.out 程序被谁执行,就决定1.txt 的权限不一样
跟程序没有关系,跟谁来运行程序有关系!!!
代码来自:朱老师 物联网大讲堂