对于我班上的一个项目,我在读取使用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);

最佳答案

manual


  creat()等同于带有等于O_CREAT | O_WRONLY | O_TRUNC的标志的open()。


由于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标志将其打开以进行读写。

08-07 04:14