chmod命令
chmod [optins] mode file...
运行 man 2 chmod查看 chmod函数接口
int chmod(const char*path, mode_t mode);
没有技术含量,主要是注意,在使用chmod命令的时候mode值是8进制而实际函数调用的时候参数是十进制,要进行进制转换
此处实现放弃 options选项,不然就有难度了
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
//这里传入8进制(only)然后转化为10进制调用chmod函数
int main(int argc, char* argv[])
{
int mode;
int mode_u;
int mode_g;
int mode_o;
char *path = NULL;
if(argc < 3)
{
printf("my_chmod: 缺少操作数\n");
exit(0);
}
mode = atoi(argv[1]);
if(mode > 7777 || mode < 0)
{
printf("my_chmod: 无效模式: \"%d\"\n",mode);
exit(0);
}
mode_u = mode / 100;
mode_g = (mode - mode_u*100)/10;
mode_o = mode%10;
mode = mode_u * 8 * 8 + mode_g * 8 + mode_o;
path = argv[2];
if( chmod(path, mode) == -1)
{
printf("my_chmod: 无法访问文件\"%s\":没有那个文件或目录\n",path); //放弃是chmod函数内部错误的处理
exit(0);
}
return 0;
}
测试如下