简化版chmod
我们知道对文件访问权限的修改在Shell下可通过chmod来进行
例如
可以看到v.c文件从无权限到所有者可读可写可执行、群组和其他用户可读可执行
chmod函数原型
int chmod(const char *path, mode_t mode)
第一个参数为文件名,第二个参数为8进制的权限参数,权限更改成功时返回0,更改失败返回-1,错误代码存储于系统预定义变量errno中。
利用chmod函数我们实现了自己简化版chmod命令
/*功能:改变文件访问权限*/ #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; /*检查参数个数的合法性1*/ if(argc < 3) { printf("%s<mode num> <target file>\n", argv[0]); exit(0); } /*检查命令行参数*/ mode = atoi(argv[1]);//atoi函数可将字符串转换成整型参数,如atoi("123")的返回值是整形数字123 if(mode < 0)//输入权限合法性检查 { printf("mode num error!\n"); exit(0); } 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; if(mode_u>7 || mode_g>7 || mode_o >7)//输入权限合法性检查2 { printf("mode num error!\n"); exit(0); } path = argv[2]; if(chmod(path, mode) == -1) { perror("chmod error"); exit(1); } return 0; }
测试下
可以,正常运行
不积小流无以成江河