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就是这么实现的