zoukankan      html  css  js  c++  java
  • 【C】——使用creat()函数需要注意的事项

     #include<fcntl.h>
    
     int creat(const char *pathname, mode_t mode);

      若成功则返回为只写打开的文件描述符,若出错则返回-1;

      有时候我们使用creat函数的时候可能会得不到我们想要的结果。例如:

    creat("foo",0666)

      当我们使用次函数的目的创建一个文件——foo,foo的属性为 -rw-rw-rw-;

      但是我们执行完creat函数之后可能会发生其他的结果,笔者的系统是REHL5.1,当我执行完creat函数之后foo的属性为:-rw-r--r--;

      这是为什么呢?

      如果你想知道为什么,就在命令行里执行umask看一下吧;

      笔者执行完umask的结果为022;umask为何物?

      该命令用来设置限制新文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。

      默认情况下root的umask为022,一般用户为002。通过vim或者vi创建文件的时候文件的属性为 666 - 默认的umask值;建立目录的时候,目录的属性为777 - umask的默认值;

      了解了这些,执行creat函数的结果就不会感到意外了。初始的属性为0666但是默认的umask为022.所以创建文件的属性就变成了-rw-r--r--;

      如何达到自己想要的结果呢?毫无疑问用umask函数吧;

    #include<sys/stat.h>
    mode_t umask(mode_t cmask);

      返回值:以前的文件模式创建屏蔽字(没有出错返回值);

      下面用一个例子直接展示吧!

    #include<stdio.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<stdlib.h>
    
    int main(int argc, char *argv[])
    {
        umask(0);
        if(creat("foo",0666) < 0){
            printf("creat foo error!");
            exit(1);
        }
    
        umask(022);  
        if(creat("bar",0666) < 0){
            printf("creat bar error!");
            exit(1);
        }
        return 0;
    }

      结果就不用多说了!

  • 相关阅读:
    JavaScript打开新窗口被拦截问题
    FileReader读取本地文件
    JS实现数组去重的6种方法总结
    cssReset
    鼠标拖拽定位和DOM各种尺寸详解
    关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js
    AJAX的get和post请求原生编写方法
    Grunt的配置和使用
    浏览器的工作流程
    Python基础——函数的迭代器和生成器
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3319939.html
Copyright © 2011-2022 走看看