致命错误:open.h:没有这样的文件或目录

时间:2017-04-20 10:41:34

标签: c

我想使用open_excl(3)来打开一个独家写作文件。

我写道:

#include <open.h>

int main(int c, char* v[]){
    int fp = open_excl("my_file");
    return 0;
}

现在: gcc -Wall file.c -o out.a

我得到一个致命的编译器错误:open.h:没有这样的文件或目录

为什么?我的路径有问题吗?缺少指向图书馆的链接? 错误的gcc版本?我使用的是5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.4)

2 个答案:

答案 0 :(得分:2)

open_excl不是标准函数;我的Linux系统上没有open.h。正如documentation on linux.die.net所说:

  

open_excl打开文件filename进行写入并返回文件句柄。在调用open_excl之前,该文件可能不存在。该文件将使用模式0600创建。

     

[...] open_excl依靠O_EXCL标志打开[...]

因此你可以用

实现同样的目标
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

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

通过以下方式调用:

int fd = open(filename, O_EXCL|O_CREAT|O_WRONLY, 0600);

要将文件描述符包装到FILE *,请使用fdopen函数:

#include <stdio.h>

FILE *fp = fdopen(fd);

答案 1 :(得分:-1)

每当您包含任何头文件时,如果使用尖括号#include <open.h>,编译器会在标准目录中查找相同的内容;如果使用引号#include "open.h",则编译器在项目目录中查找相同内容。

因此,您可以先检查标准目录中是否有open.h文件(可能不是这种情况),您可以下载并复制本地目录中的头文件,并使用相同的引号。