Arch LINux 上未定义 O_DIRECT

Posted

技术标签:

【中文标题】Arch LINux 上未定义 O_DIRECT【英文标题】:O_DIRECT not defined on Arch LInux 【发布时间】:2020-11-23 10:22:33 【问题描述】:

我正在尝试编写一些低延迟磁盘访问代码。问题是我正在使用的库具有以下代码:

#ifdef O_DIRECT
  int flags = O_DIRECT;
#else
  int flags = 0;
#endif

我的安装没有定义O_DIRECT。 我已经通过这个简单的程序确认了这一点:

#include <stdio.h>

int main(void)
#ifdef O_DIRECT
        printf("O_DIRECT");
#else
        printf("Otherwise");
#endif

打印Otherwise

所以问题是为什么没有定义?另外如何解决这个问题?

【问题讨论】:

【参考方案1】:

宏其实是defined in&lt;fcntl.h&gt;,不是stdio.h。

其次,要访问定义,您需要#define _GNU_SOURCE,因为它是Linux-specific。请注意,定义必须在 any libc 标头包含之前,而不仅仅是在 fcntl.h 之前。

【讨论】:

以上是关于Arch LINux 上未定义 O_DIRECT的主要内容,如果未能解决你的问题,请参考以下文章

在 Arch Linux 上构建微软 CNTK 时出错:libCntk.Eval-2.0.so 抱怨未定义对 TensorView 的引用

传输后数据库在 Linux 服务器上未连接

Stackdriver 上未显示自定义 OpenCensus 指标

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”

android上未显示自定义标记图标[关闭]

Laravel - 视图上未定义的变量 $data