Linux中chmod指令的实现

标签: linux
572人阅读 评论(2) 收藏 举报
分类:

chmod命令可以使用八进制数来指定权限。首先man 2 chmod查看chmod函数原型
这里写图片描述
为int chmod(const char *pathname,mode_t mode);权限更改成功返回0,失败返回-1.错误代码储存在errno中

#include<stdio.h>
#include<stdlib.h>                //strtol对应头文件
#include<sys/stat.h>
#include<errno.h>

int main(int argc,char** argv)       //argc记录指令数,argv记录指令
{
    int mode;               //mode_t类型
    char* path;
    if(argc<3)              //当指令数小于3时报错,并结束程序
    {
        printf("%s <mode num> <target file>\n",argv[0]);
        exit(0);
    }
    mode=strtol(argv[1],NULL,8);         //将输入的权限对应字符串转换为八进制数字
    if(mode>0777||mode<0)                //当mode>八进制的777时报错并结束程序
    {
        printf("mode num error!\n");
        exit(0);
    }
    path=argv[2];                        //path指向待更改权限的文件名
    if(chmod(path,mode)==-1)             //更改权限失败时报错,并结束程序
    {
        perror("chmod error!");
        exit(1);
    }
    return 0;
}

在这里需要说明一下,strtol的返回值为long int,也就是说我们在用mode存储strtol的返回值时,八进制已经被强制转换为十进制了,例如我们要更改的权限为777,则mode的值为十进制的 511.然后chmod会去识别输入的为八进制还是十进制。然后去将文件的权限更改为八进制对应的权限。
最后咱们看看结果。
首先创建一个新的文件,然后再用我们的程序去更改其权限为0。
这里写图片描述
我们还可以将生成的可执行文件放到公共目录中,然后通过alias对”绝对路径/my_chmod”起别名为my_chmod。那么我们就可以在别的目录下使用咱们写的my_chmod指令了(my_chmod后的文件名应当为绝对路径)。

查看评论

UML参考手册 第二部分 基 本 概 念 第5章 用 例 视 图

UML参考手册  第二部分 基 本 概 念  第5章 用 例 视 图 5.1 概述  当用例视图在外部用户前出现时,它捕获到系统、子系统或类的行为。它将系统功能划分成对参与者(即系统的理想用户)有用的...
  • CandyCat
  • CandyCat
  • 2001-05-26 22:59:00
  • 1240

linux chmod命令详细用法

指令名称 : chmod  使用权限 : 所有使用者  使用方式 : chmod [-cfvR] [--help] [--version] mode file...  说明 : Linux/Un...
  • zhangliao613
  • zhangliao613
  • 2014-06-24 10:34:34
  • 1607

linux指令大权

  • 2014年08月01日 17:48
  • 202KB
  • 下载

linux对文件赋权限的命令chmod的详细说明

转载自:http://hj8868163.blog.163.com/blog/static/249034852010922105212447/ 指令名称 : chmod 使用权限 : 所有...
  • wuanwujie
  • wuanwujie
  • 2017-05-08 15:02:32
  • 637

linux 命令系列之 mount命令(36)

1.mount 命令  [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点        -l  查询系统中已经挂载的设备,-l 会显示卷标        -a ...
  • chmod_R_755
  • chmod_R_755
  • 2015-04-23 09:16:24
  • 928

chmod 命令,主要是+s的选项

今天在以php调用shell命令时采用exec发现apche用户过来,不能执行tar命令,所以给tar命令加了粘滞位 #chmod +s /bin/tar 附: 编辑 /etc/sudoers ...
  • shaobingj126
  • shaobingj126
  • 2011-12-01 15:37:40
  • 16298

在Linux中, 用C语言简单实现chmod命令

在Linux中,我们知道chmod这个命令的功能是改变文件的权限。 现在, 用C语言实现这个改变文件权限的功能 要用C语言实现这个功能的核心就是 利用chmod()这个函数及对需要改变的权限的分析 ...
  • qq283802332
  • qq283802332
  • 2013-11-22 22:49:14
  • 2465

linux设置文件权限(find+chmod)

要求是把一个目录下的所有目录及其子目录设置成555,把所有php文件设置成444,但是data目录不变 =。= 最后只能想到这样的... find ~/Desktop/test -path ~/D...
  • rrr4578
  • rrr4578
  • 2013-04-02 15:52:41
  • 5849

Linux chmod命令及权限含义

对于一条权限赋值命令:sudo chmod  -R 764 ×××;我们必须了解其含义: (1)各字段含义:sudo chmod  -R(更改文件夹及其子文件夹)                ...
  • tomcat_2014
  • tomcat_2014
  • 2016-10-28 16:45:14
  • 2384

linux指令大全适用于上机

  • 2009年03月18日 23:36
  • 296KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 7978
    积分: 342
    排名: 23万+
    最新评论