我想使用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)
答案 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文件(可能不是这种情况),您可以下载并复制本地目录中的头文件,并使用相同的引号。