3.2.4.文件权限管理1

学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 的权限不一样

跟程序没有关系,跟谁来运行程序有关系!!!

代码来自:朱老师 物联网大讲堂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大漠飞鹰6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值