简化版chmod命令的实现
chmod命令
chmod 命令是用来修改用户对文件的权限的命令。下面我们将通过sys/types.h和sys/stat.h头文件中的chmod函数实现一个简化版的chmod命令。
命令格式
./my_chmod <mode num> <target file>
chmod函数
在编写my_chmod时,我们要用到sys/types.h和sys/stat.h头文件中的chmod函数。这个函数的函数原型是:
int chmod(const char *path, mode_t mode)
其中path是目标文件的路径,mode是我们要将文件修改成的权限。mode_t其实就是unsigned int类型。
需要注意的是参数mode应该是用八进制表示的数值。比如我们要将一个文件的权限设置为644(即rw-r–r--),那么我们向chmod函数传入的值为 0644(即十进制的420)。
如果chmod函数修改权限成功返回0,失败返回-1。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
int mode, mode_u, mode_g, mode_o;
char *path;
// 如果输入的参数个数不为3,则输出命令格式后退出
if (argc != 3)
{
printf("%s <mode num> <target file>\n", argv[0]);
exit(EXIT_FAILURE);
}
path = argv[2];
mode = atoi(argv[1]);
mode_u = mode / 100;
mode_g = mode / 10 % 10;
mode_o = mode % 10;
if (mode_u >= 0 && mode_u <= 7 && mode_g >= 0 && mode_g <= 7 && mode_o >= 0 && mode_o <= 7)
{
// 八进制转换
mode = mode_u * 64 + mode_g * 8 + mode_o;
if (chmod(path, mode) == -1)
{
perror("chmod error");
exit(EXIT_FAILURE);
}
}
else
{
// 参数mode格式不合法
printf("mode num error:%s\n", argv[1]);
exit(EXIT_FAILURE);
}
return 0;
}