zoukankan      html  css  js  c++  java
  • 实现linux touch 命令及 文件权限的由来

    一、函数介绍 

      ①open---打开或创建一个文件

        open(char *, flag, mode)在fcntl.h声明中。最多有三个参数:

          功能:打开或创建一个文件

          参数:第一个参数,char * 包含有文件名和路径

             第二个参数,flag      打开文件参数

             第三个参数,mode   创建文件和权限

             flag内容:  flag              |  功能

                     O_RDONLY    |  只读

                   O_WRONLY   |  只写 

                   O_RDWR   |  读写

                   O_CREAT      |   创建一个文件

                   O_EXCL        |   如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。

                   O_TRUNC  | 打开文件(会把已经存在的内容给删除) 

                   O_APPEND  |  追加方式打开文件(不会把已经存在的内容删除)

          返回值:成功---返回文件描述符,它是一个非负的正整数,即文件的ID号,相当于人的身份证号;

              出错---返回-1

    二、代码示例

    /*
       功能:创建一个文件 
    */
    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int main(int argc, char *argv[])
    {
         int fd = open(argv[1], O_CREAT | O_RDWR, 0777);
         if(fd < 0 )
         {
              printf("creat file %s failed!
    ", argv[1]);
              return -1;
         }      
         printf("create file %s failed!, fd = %d
    ", argv[1], fd);
         close(fd);
         return 0;           
    }

     三、结果展示

      

      如上图所示:我们实现了和touch一样的功能,此时可以看出我们生成的文件权限为755

      ① 生成的文件权限值是怎么来的呢?

       我们代码中写的权限是777,我们生成文件的权限是755,说明这和代码中写的权限没有关系

           生成文件的权限=mode & (~umask)

       首先查看我们linux下的umask值:

       

       可以看到我们umask值是022,前面第一个0代表八进制

       将它们转换为二进制:

         777 ---- 111  111  111

         022 ---- 000  010  010

        umask取反111 101  101

        最后跟前面777的二进制作与运算,结果为:111 101 101,即755

                   

                    

  • 相关阅读:
    植物大战僵尸智慧树和金币的简单破解(二)
    植物大战僵尸任意阳光的简单破解(一)
    Bash漏洞分析
    树莓派4 安装vim8.2 编译python3支持
    JAVA实现剑指offer 大神博主网址
    IO流+集合完成功能
    Java学习IO流处理
    Java中拷贝图片IO流
    Java学习list集合练习二
    java学习list集合训练
  • 原文地址:https://www.cnblogs.com/jiangson/p/6070234.html
Copyright © 2011-2022 走看看