Linux C编程学习笔记(1):chmod函数及文件的访问权限控制

2019-07-13 05:31发布

my_chmod.c

#include #include #include   //基本系统数据类型 #include   //文件状态 //argc记录了用户在运行程序的命令行中输入的参数的个数 //**argv:或者认为是*argv[]字符串指针数组,每一个元素指向一个在命令行输入的参数 //编译器将输入参数的信息放入main函数的参数列表中 //赋值过程是编译器完成的,我们只需要读出数据就可以了 int main(int argc,char **argv) { int mode; //权限 int mode_u; //所有者user的权限 int mode_g; //所属组group的权限 int mode_o; //其他用户other的权限 char *path; //检查参数个数的合法性 //若在命令行输入参数少于3个,则不合法,并给出正确输入方法的提示信息 if(argc<3) { printf("%s ",argv[0]);               //argv[0]指向输入的程序路径及名称。 exit(0);  //正常运行并退出程序,0返回给操作系统 } //获取命令行参数 //atoi()函数:将字符串转化为int类型变量 mode=atoi(argv[1]); if(mode>777||mode<0) { printf("mode num error! "); exit(0); } mode_u=mode/100; mode_g=mode/1010; mode_o=mode%10; mode=(mode_u*8*8)+(mode_g*8)+mode_o; //八进制转换 path=argv[2];    //int chmod(const char * path, mode_t mode) //函数说明:chmod()会依参数mode权限来更改参数path指定文件的权限。 //更改失败返回-1 if(chmod(path,mode)==-1) { perror("chmod error"); //perror()是错误输出函数,在标准输出设备上输出一个错误信息。 exit(1); //非正常运行并退出程序。 } return 0; }
编写mychmod.c并编译,发现代码没有语法错误。
然后创建一个目录test。
这里写图片描述
用ls -l命令查得它的权限如下:
这里写图片描述
更改该目录权限(775改为742):
这里写图片描述
再次用ls -l命令查得它的权限如下:
这里写图片描述
目录权限更改成功!

更改失败有以下三种情况*

若输入的mode参数大于777,小于0:
这里写图片描述
若输入的参数个数小于3:
这里写图片描述
若要进行修改权限的目录当前用户不允许操作:
这里写图片描述

chmod函数

1.原型

  #include   #include   int chmod(const char *pathname, mode_t mode);

2.功能

  依参数mode权限来更改参数pathname指定文件的权限。

atoi函数

1.原型

  #include   int atoi(const char *ptr);

2.功能

  把字符串转换成整型数。

3.参数

  ptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符