简化版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;
}

  

 

 测试下

可以,正常运行

 

posted @ 2019-03-24 12:44  C_hp  阅读(228)  评论(0编辑  收藏  举报