st_mode中记录文件的权限位
st_mode本质上是一个32位的数,类型其实就是unsigned int,这个数里的每一个二进制位表示一个含义
我们使用的时候使用专门的掩码取出需要的标志位
ls -l打印详细列表
文件类型和权限列表 注意日期是建档日期
文件操作时的权限规则
讲真,文件访问操作,不仅与文件的属性有关,还与访问者的权限有关,分别判断很繁琐,用一个函数判断有没有访问权限就是access调用
最好养成一个好的习惯,就是操作文件时,最好先看一下有没有访问这个文件的权限
#include <stdio.h>
#include <unistd.h>
#define NAME "a.txt"
int main(void)
{
int ret = -1;
ret = access(NAME, F_OK);
if(ret < 0)
{
printf("文件不存在\n");
return -1;
}
else
{
printf("文件存在 ");
}
ret = access(NAME, R_OK);
if(ret < 0)
{
printf("不可读 ");
return -1;
}
else
{
printf("可读 ");
}
ret = access(NAME, W_OK);
if(ret < 0)
{
printf("不可写 ");
return -1;
}
else
{
printf("可写 ");
}
ret = access(NAME, X_OK);
if(ret < 0)
{
printf("不可执行\n");
return -1;
}
else
{
printf("可执行\n");
}
return 0;
}
chmod 更改文件权限的命令,只有root用户可以进行操作
chmod的命令其实使用chmod的API实现的
也就是API才是所有的基础
示例代码
#include <stdio.h>
#include <sys/stat.h>
#define NAME "a.txt"
int main(int argc,char **argv)
{
int ret = -1;
if(argc != 2)
{
printf("usage :%s filename\n", argv[0]);
return -1;
}
ret = chmod(argv[1], S_IRUSR | S_IWUSR | S_IWUSR);//只给uer属主所有权限,别人的什么都不给
if(ret < 0)
{
perror("chmod");
return -1;
}
else
{
printf("argc :%d \n", argc);
printf("argv[0] :%s \n", argv[0]);
printf("argv[1] :%s \n", argv[1]);
}
return 0;
}