编程实现对Linux下的文件访问的权限修改代码如下:
#include<stdio.h>
#include<stdlib.h>
#include "sys/types.h"
#include<sys/stat.h>
int main(int argc,char **argv)
{
int mode;
int mode_u;
int mode_g;
int mode_o;
char *path;
if(argc<3)
{
printf("%s<mode num> <target file>\n",argv[0]);
// exit(0);
}
mode=atoi(argv[1]);
if(mode>777 ||mode<0)
{
printf("mode num error!\n");
}
mode_u=mode /100;
mode_g=(mode-(mode_u*100))/10;
mode_o=mode-(mode_u*100)-(mode_g*10);
mode=(mode_u*8*8)+(mode_g*8)+mode_o;
path =argv[2];
if(chmod(path,mode)==-1)
{
perror("chmod error");
}
return 0;
}
代码很精简其中四个整型变量对应着四种权限,mode:权限,mode_u:用户权限,mode_g:组的权限,mode_o:其他用户的权限。path指针是要修改权限文件的路径。接着是判断参数的个数是否正确,有三个参数:命令权限 文件名。如果参数的个数少于3个则打印小错误的消息。
然后是获取命令行参数的代码,mode=atoi(argv[1]);是文件的权限,当用户从键盘输入数字时,其是字符码,所以要把它转换为整型,atoi就是ascii to int 的意思。然后判断输入的权限是否正确,知道权限的范围是从0~777。接着是所有者的权限,让权限的值除以100即得所有者的权限,如如果mode为777,表示所有者,所有组,其他用户都对该文件具有r,w,x的权限,则mode_u=777/100=7,而所有组的为:mode_g=(777-(7*100))/10=7,mode_o=777-(7*100)-(7*10)=7;
接着进行八进制转换即把三个权限转化为系统所识别的操作权限。
最后是文件名和文件路径的设置及判断。
测试下:
可见,程序正确地对test.c进行了文件权限的修改/。