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;
    }

      结果就不用多说了!

  • 相关阅读:
    linux文件系统初探--Day6
    Oracle 内置函数
    libusb常用函数说明(转)
    将多个blv格式的视频合并为一个mp4格式视频
    泰迪杯赛后总结
    如何下载B站上版权受限的视频?
    查看Ubuntu版本信息
    Visual Studio存在多个项目时启动项目的问题
    mfc | 初识mfc
    re | [ACTF新生赛2020]Splendid_MineCraft
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/3319939.html
Copyright © 2011-2022 走看看