C 文件描述符在打开时返回 -1

C File Descriptor is returning -1 on open

这个问题非常简单,但我似乎无法使用文件描述符打开新文件进行写入。我尝试过的每个变体 returns -1。我错过了什么?这就是使用文件描述符初始化文件的方式,对吗?我找不到另有说明的文档。

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
  int fd;
  mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
  fd = open ("/home/CSTCIS/sample.dat", O_WRONLY, mode);
  printf("%d\n", fd);
}

perror() 打印 open: No such file or directory.

引用 pubs.opengroup.org,

Upon successful completion, the [open] function shall open the file and return a non-negative integer representing the lowest numbered unused file descriptor. Otherwise, -1 shall be returned and errno set to indicate the error. No files shall be created or modified if the function returns -1.

要检查open()语句有什么问题,只需写:

perror("open");

printf() 语句之前。

OP 已找到解决方案:

The open() command works if O_CREAT flag is included.

fd = open ("/home/CSTCIS/sample.dat", O_WRONLY | O_CREAT, mode);

发现问题 - 这需要包含在标志中:O_CREAT

当我们使用 open() function 时,我们可以打开文件结构中已经存在的文件。

如果我们想创建一个新文件,那么我们可以在open()中使用O_CREAT标志 函数,或者我们可以像这样使用 creat() 函数。

   mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
   fd = open ("/home/CSTCIS/sample.dat", O_WRONLY|O_CREAT, mode);

(或)

  fd=creat("/home/CSTCIS/sample.dat",mode);

当我们使用creat()函数时,它会以只读模式打开文件。