linux C语言如何得到一个文件的权限并输出

linux C语言如何得到一个文件的权限并输出,第1张

/*-楼主可以参考一下我写的这段程序---------*/

/*-----用stat函数得到文件信息,并用函数转化为文本输出,就跟ls命令一样-----*/

/*----------注释我写得很详细,望采纳-----------*/

#include <sys/types.h>/*-----这三个头文件一定要有-*/

#include <sys/stat.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

void mode_to_letter(int mode,char *str)

{

/*-------这个函数用来把模式值转化为字符串------*/

str[0]='-'/*------这里的S_*****都是宏定义,用来判断模式属性-*/

if(S_ISDIR(mode)) str[0]='d'/*-文件夹-*/

if(S_ISCHR(mode)) str[0]='c'/*-字符设备-*/

if(S_ISBLK(mode)) str[0]='b'/*-块设备-*/

if(mode &S_IRUSR) str[1]='r'/*--用户的三个属性-*/

else str[1]='-'

if(mode &S_IWUSR) str[2]='w'

else str[2]='-'

if(mode &S_IXUSR) str[3]='x'

else str[3]='-'

if(mode &S_IRGRP) str[4]='r'/*--组的三个属性-*/

else str[4]='-'

if(mode &S_IWGRP) str[5]='w'

else str[5]='-'

if(mode &S_IXGRP) str[6]='x'

else str[6]='-'

if(mode &S_IROTH) str[7]='r'/*-其他人的三个属性-*/

else str[7]='-'

if(mode &S_IWOTH) str[8]='w'

else str[8]='-'

if(mode &S_IXOTH) str[9]='x'

else str[9]='-'

str[10]='\0'

}

int main(int argc,char *argv[])

{

struct stat sb/*- 定义stat结构--*/

char str[12]

if(argc!=2){

fprintf(stderr,"Usage: %s <pathname>\n",argv[0])

exit(EXIT_FAILURE)

}

if(stat(argv[1],&sb)==-1){/*-stat函数,详情请 man 2 stat 查看 -*/

perror("stat")

exit(EXIT_FAILURE)

}

printf("Mode:%lo(octal)\n",(unsigned long)sb.st_mode)

mode_to_letter(sb.st_mode,str)

printf("Mode:%s\n",str)

return 0

}

根据chmod ABC file。

其中A、B、C各为一个数字,分别表示User、Group、及Other的权限

A、B、C这三个数字如果各自转换成由“0”、“1”组成的二进制数,则二进制数的每一位分别代表一个角色的读、写、运行的权限。

比如User组的权限A:

如果可读、可写、可运行,就表示为二进制的111,转换成十进制就是7。

如果可读、可写、不可运行,就表示为二进制的110,转换成十进制就是6。

如果可读、不可写、可运行,就表示为二进制的101,转换成十进制就是5。

扩展资料:

实例说明

444 r--r--r--

600 rw-------

644 rw-r--r--

666 rw-rw-rw-

700 rwx------

744 rwxr--r--

755 rwxr-xr-x

777 rwxrwxrwx

从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。

而具体的权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;

通过4、2、1的组合,得到以下几种权限:0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)

以755为例:

1-3位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;

4-6位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;

7-9位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。

通过4、2、1的组合,得到以下几种权限:

0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)

以755为例:

1-3位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;

4-6位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;

7-9位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8297926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存