O_DIRECT 未在 Arch 上定义 LInux

O_DIRECT not defined on Arch LInux

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

#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.

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

宏其实是defined in<fcntl.h>,不是stdio.h.

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

之前