【问题标题】:Quick Question About the creat() System Call mode Argument关于 creat() 系统调用模式参数的快速问题
【发布时间】:2020-05-10 00:54:59
【问题描述】:

对于我课堂上的一个项目,我在读取使用 creat() 系统调用创建的文件时遇到了问题。现在据我了解, creat() 仅用于编写。我已经修改了我的代码以使用 open() 创建这个文件,所以我的问题纯粹是出于好奇。那么 mode 参数的意义何在?我最初是按位 ORd 读取和写入权限,文件描述符会显示它具有这些权限,但是当我读取文件时,我得到了 -1 返回值。对我来说很奇怪。我也在手册中找到了这段代码,所以我很困惑。为什么我的程序无法读取文件时,赋予文件读取权限,但同时描述符显示文件有读取权限?

#include <fcntl.h>

int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
char *filename = "/tmp/file";
fd = creat(filename, mode);

【问题讨论】:

    标签: c linux system-calls


    【解决方案1】:

    来自manual

    creat() 等效于 open(),其标志等于 O_CREAT|O_WRONLY|O_TRUNC。

    由于O_WRONLY,文件以只写模式打开。

    使用open:

    mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
    char *filename = "/tmp/file";
    fd = open(filename, O_CREAT|O_RDWR|O_TRUNC, mode);
    

    为什么我的程序不能读取文件时,给文件读取权限,但同时描述符显示文件有读取权限?

    文件权限与打开文件描述符的模式不同。创建文件时具有读取权限,因此您可以打开它进行读取,但您以只写模式打开文件。使用O_RDWR 标志打开它进行读写。

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 2012-01-13
      • 2011-11-05
      • 1970-01-01
      • 2021-07-29
      • 2010-10-19
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多