今天操作系统上机,突然就想把Linux C编程实战重新看一遍,当然从文件系统着手,把my_chmod这个程序重新敲了一遍收获不少呀。
在进行程序设计时,可以通过chmod/fchmod函数对文件访问权限进行修改,在Shell下输入man 2 chmod 可查看chmod/fchmod的函数原型,如下:
- #include <sys/stat.h>
-
- int chmod(const char *path, mode_t mode);
- int fchmod(int fd, mode_t mode);
chmod/fchmod的区别在于chmod以文件名作为第一个参数,fchmod以文件描述符作为第一个参数。参数mod主要有一下几种组合。
以下为我的chmod函数,my_chmod.c
- #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 ",argv[0]);
- exit(0);
- }
-
- mode = atoi(argv[1]);
- if(mode > 777 || mode < 0){
- printf("mode num error!\n");
- exit(0);
- }
- mode_u = mode / 100;
- mode_g = (mode % 100) / 10;
- mode_o = mode % 10;
- mode = (mode_u * 8 * 8) + (mode_g * 8)+ mode_o;
- path = argv[2];
-
- if(chmod(path,mode) == -1){
- perror("chmod error");
- exit(1);
- }
-
- return 0;
- }
在程序中,权限更改成功返回0,失败返回-1,错误代码存于系统预定义变量errno中。
上面的程序中,atoi这个函数调用是将字符串转换成整型,例如:atoi("777")的返回值为整型的777.对于chmod函数,第二个参数一般用上面列出来的宏之间取或运算。
对于这个程序,Linux C编程实战中的取mode值的方法可能比较高效,附关键代码:
- mode_u = mode / 100;
- mode_g = (mode - (mode_u*100)) / 10;
- mode_0 = mode - (mode_u * 100) - (mode_g * 10);
这节课的学习就到这吧。(未完待续)
阅读(1720) | 评论(0) | 转发(0) |