获取文件的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");
}
要求:输入文件名,分别打印该文件的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");
}
相关文章推荐
- linux创建用户 限制权限-用户(User)和用户组(Group)配置文件详解
- Python中获取某个用户对某个文件或目录的访问权限
- PowerShell: 如何获取和修改文件或文件夹的访问权限
- linux创建用户 限制权限-用户(User)和用户组(Group)配置文件详解
- Linux 用户(user)和用户组(group)概念以及修改linux文件权限命令chmod
- LINUX C 获取文件类型 以及访问权限
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
- linux查看文件/目录 大小(du)、权限(ls ll),用户及组(user/group)增、删、改 (chmod/chown/chgrp)
- android开发学习(二)——保存文件到手机内存和SD卡,文件访问权限,获取内存大小
- linux创建用户 限制权限-用户(User)和用户组(Group)配置文件详解
- 对路径"xxxxx"的访问被拒绝(文件操作权限)的解决方法
- 使用Cacls命令设置服务器文件访问权限
- 命令行下修改文件访问控制权限
- 安装VS2005 SP1出现这样问题“windows 无法访问指定设备、路径或文件。您可能没有合适的权限访问这个项目。”
- 使用DirectoryServices给文件添加访问权限
- 用Cacls.exe修改文件访问权限
- ASP.Net的一个文件访问权限错误之解决
- 用户(User)和用户组(Group)配置文件详解
- 简析Linux中如何改变文件或目录的访问权限
- Linux改变文件或目录的访问权限命令