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

时间:2015-03-20 03:50:58

标签: c file-descriptor

令人尴尬的简单问题,但我似乎无法使用文件描述符打开一个新文件。我尝试的每个变体都会返回-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

3 个答案:

答案 0 :(得分:4)

引用pubs.opengroup.org

  

成功完成后,[open]功能将打开文件并且   返回一个非负整数,表示最低编号的未使用   文件描述符。否则,将返回 -1并将errno设置为   表明错误。如果是,则不应创建或修改任何文件   函数返回-1

要检查open()语句的问题,请写下:

perror("open");
printf()陈述之前

OP找到了解决方案:

  

如果包含open()标志,则O_CREAT命令有效。

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

答案 1 :(得分:2)

当我们使用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()函数时,它将以只读模式打开文件。

答案 2 :(得分:1)

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