O_DIRECT необъявленный, Eclipse CDT, Ubuntu 20.04 - PullRequest
0 голосов
/ 27 апреля 2020

У меня проблема с O_DIRECT. Я пытаюсь использовать его с open(), но получаю сообщение об ошибке:

error: O_DIRECT undeclared (first use in this function)

Я включаю <fcntl.h>

Я выделил каталог /usr/include/ для O_DIRECT и оно существует в x86_64-linux-gnu/bits/fcntl-linux.h. Вместо этого я попытался включить этот файл, но затем получаю эту ошибку:

error: #error Never use <x86_64-linux-gnu/bits/fcntl-linux.h> directly; include <fcntl.h> instead.

Я пытаюсь все это сделать в проекте Eclipse CDT во вновь установленной системе Ubuntu 20.04.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

существует в x86_64- linux -gnu / bits / fcntl- linux .h. Вместо этого я попытался включить этот файл, но затем я получаю эту ошибку

Как говорится в сообщении об ошибке, вы не должны включать bits заголовки напрямую.

O_DIRECT - это Linux расширение (т.е. не в POSIX). Вам нужно определить _GNU_SOURCE, чтобы получить его. Вы можете определить его в верхней части исходного файла, например:

#define _GNU_SOURCE

или определить при компиляции с -D_GNU_SOURCE. например,

gcc -D_GNU_SOURCE file.c

Вас может заинтересовать Что означает "#define _GNU_SOURCE"? тоже.

1 голос
/ 27 апреля 2020

Вы должны определить _GNU_SOURCE перед включением <fcntl.h> или добавить -D_GNU_SOURCE в команду компилятора.

Обратите внимание, что это уменьшает переносимость вашей программы.

...