您的位置:首页 > 其它

获取文件的user, group, others访问权限

2014-06-14 14:33 267 查看
描述:文件的访问权限分为:用户读,用户写,用户执行;组用户读,组用户写,组用户执行;其他用户读,其他用户写,其他用户执行。通过访问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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐