描述:文件的访问权限分为:用户读,用户写,用户执行;组用户读,组用户写,组用户执行;其他用户读,其他用户写,其他用户执行。通过访问struct stat结构体中的st_mode成员,可以获取到文件的访问权限。
要求:输入文件名,分别打印该文件的user、group及others的访问权限。
知识点:获取文件的属性int stat(const char *restrict pathname, struct stat *restrict buf)
#include <sys/stat.h>
#include <unistd.h>
pathname:文件的绝对路径名;
buf:存有文件属性的stat结构体。
执行成功则返回0,失败返回-1,错误代码存于errno
struct stat {
mode_t st_mode; //文件的类型和存取的权限
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //文件内容对应的块数量
}
代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
struct stat buf;
int res;
if(argc!=2)
{
perror("参数不正确!正确格式:./main filename");
exit(1);
}
res=stat(argv[1],&buf);
if(res<0)
{
perror("stat error");
exit(1);
}
//if(buf.st_mode&S_IRWXU) printf("user read write execute\n");
if(buf.st_mode&S_IRUSR) printf("user read \n");
if(buf.st_mode&S_IWUSR) printf("user write \n");
if(buf.st_mode&S_IXUSR) printf("user execute\n");
//if(buf.st_mode&S_IRWXG) printf("group read write execute\n");
if(buf.st_mode&S_IRGRP) printf("group read \n");
if(buf.st_mode&S_IWGRP) printf("group write\n");
if(buf.st_mode&S_IXGRP) printf("group execute\n");
//if(buf.st_mode&S_IRWXO) printf("other read write execute\n");
if(buf.st_mode&S_IROTH) printf("other read \n");
if(buf.st_mode&S_IWOTH) printf("other write\n");
if(buf.st_mode&S_IXOTH) printf("other execute\n");
}