当前位置:主页 > 查看内容

Linux如何用C代码获取文件的权限

发布时间:2021-08-18 00:00| 位朋友查看

简介:LinuxC获取文件的权限 1、struct stat介绍 2、获取文件权限 3、编译运行 1、struct stat介绍 我们在Linux中每个文件都对应的有相应的属性这些属性都保存在一个叫struct stat的结构体中其中的属性如下。 内核中struct stat 结构体 struct stat { mode_t st_mo……

1、struct stat介绍

我们在Linux中每个文件都对应的有相应的属性,这些属性都保存在一个叫struct stat的结构体中,其中的属性如下。

内核中struct stat 结构体:

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;     //伟建内容对应的块数量

      }; 

stat结构体中的st_mode 则定义了下列数种情况:

   S_IFMT   0170000    文件类型的位遮罩
   S_IFSOCK 0140000    scoket
   S_IFLNK 0120000     符号连接
   S_IFREG 0100000     一般文件
   S_IFBLK 0060000     区块装置
   S_IFDIR 0040000     目录
   S_IFCHR 0020000     字符装置
   S_IFIFO 0010000     先进先出

   S_ISUID 04000     文件的(set user-id on execution)位
   S_ISGID 02000     文件的(set group-id on execution)位
   S_ISVTX 01000     文件的sticky位

   S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限
   S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限
   S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限

   S_IRGRP 00040             用户组具可读取权限
   S_IWGRP 00020             用户组具可写入权限
   S_IXGRP 00010             用户组具可执行权限

   S_IROTH 00004             其他用户具可读取权限
   S_IWOTH 00002             其他用户具可写入权限
   S_IXOTH 00001             其他用户具可执行权限

2、获取文件权限

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#define N_BITS 3

int main(int argc,char *argv[])
{
	unsigned int i,mask=0700;
	struct stat buff;
	static char *perm[]={"---","--x","-w-","-wx","r--","r-x","rw-","rwx"};
	if(argc>1)
	{
		if((stat(argv[1],&buff)!=-1))
		{
			printf("permissions for %s\t",argv[1]);
			for(i=3;i;--i)
			{
				printf("%3s",perm[(buff.st_mode&mask)>>(i-1)*N_BITS]);
				mask>>=N_BITS;
			}
			putchar('\n');
		}
		else
		{
			perror(argv[1]);
			exit(1);
		}
	}
	else
	{
		fprintf(stderr,"Usage:%s file_name\n",argv[0]);
	}
	return 0;
}

3、编译运行

在这里插入图片描述

;原文链接:https://blog.csdn.net/weixin_45309916/article/details/115874389
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐