39_文件属性stat函数的应用,文件类型/文件权限判断

本文介绍如何使用C语言在Linux环境下判断文件的类型及权限。通过具体代码示例展示了如何利用stat函数获取文件状态信息,并进一步判断文件是否为普通文件及所有者的读权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、man 2 state

2、其中,mode表示文件类型,是按位标志的 类似CPSR

有很多标志位,记录了很多信息,操作室进行与操作可得类型,由于不容易记住,

所以Linux提供很多宏来进行判断


把需要mode放进去看返回值,那么符合的话返回0还是1呢,需要我们写代码测试一下,结果显示返回1

是不是普通文件/文件件/FIFO/符号链接/socket/


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>



#define NAME  "a.txt"
int main(void)
{
	int ret = -1;
	struct stat buf = {0};
	
	
	memset(&buf, 0, sizeof(buf));
	ret = stat(NAME, &buf);
	if(ret <0)
	{
		perror("stat");
		exit(-1);
	}
	
	//判断文件的属性
	int res = S_ISREG(buf.st_mode);//如果是普通文件返回res
	
	printf("res = %d.\n", res);
	
	return 0;
}



st_mode 除了记录文件类型之外,还记录了文件权限,

Linux并没有给文件权限提供宏操作,只是提供了位掩码,我们只能自己判断是否有位权限,


测试代码如下

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>



#define NAME  "a.txt"
int main(void)
{
	int ret = -1;
	struct stat buf = {0};
	
	
	memset(&buf, 0, sizeof(buf));
	ret = stat(NAME, &buf);
	if(ret <0)
	{
		perror("stat");
		exit(-1);
	}
	
	/*
	//判断文件的属性
	int res = S_ISREG(buf.st_mode);
	printf("res = %d.\n", res);
	*/
	
	//文件的权限测试
	int res = ((buf.st_mode & S_IRUSR)? 1:0); //判断该位是否为1
	printf("owner permissions : %d.\n", res);
	
	return 0;
}

显示结果为1




现在更改文件权限


最好不要在共享文件夹下操作:


在Linux下再打开一个终端,还是ctrl + alt + t

切换两个命令窗口依然是 alt + tab

更改属性的命令:不要在共享文件夹里面测试

chmod o-r a.txt  把others的可读权限去掉

chmod o+w a.txt  把others的可写权限加上


所以ls -l就是这么实现的







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值