【问题标题】:c Open() functionc Open() 函数
【发布时间】:2020-08-01 03:05:34
【问题描述】:

我在理解 open 函数中的参数时遇到了一些麻烦,特别是在创建输出文件的上下文中。我不太了解标志和文件权限(函数中的第二个和第三个参数)的作用。例如,如果我有文件权限 00200(用户有写权限)和标志 O_RDONLY(只读),那么我可以读文件还是写文件?

【问题讨论】:

    标签: c file file-permissions


    【解决方案1】:

    open的签名如下:

     int open(const char *pathname, int flags, mode_t mode);
    

    有三组“权限”在起作用:文件本身的权限、标志和模式。

    文件本身的权限(例如 00200 表示只有用户可以写入)指定操作系统允许程序执行的操作。

    当您指定标志时,表明您想要对文件执行什么操作。例如,如果文件对您是只读的(例如 rwxr-xr-x 而您不是所有者),您将被允许使用 O_RDONLY 打开文件。如果您尝试使用O_RDWRO_WRONLY 打开文件,您将在errno 中收到EPERM(不允许操作)错误。

    mode 参数仅在您创建 new 文件时相关,例如当您打开一个不存在的文件时1 和标志 @987654331 @ 已指定。该文件是在文件系统上创建的,其权限由mode & ~umask 提供(有关详细信息,请参阅man 2 umask)。

    1 当然,包含目录必须存在,并且您必须对该目录具有写入+执行权限。

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多