O_DIRECT не определен в Arch LInux - PullRequest
       106

O_DIRECT не определен в Arch LInux

0 голосов
/ 03 августа 2020

Я пытаюсь написать код доступа к диску с малой задержкой. Проблема в том, что используемая мной библиотека имеет следующий код:

#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 Ответ

2 голосов
/ 03 августа 2020

Макрос на самом деле определен в <fcntl.h>, а не в stdio.h.

Во-вторых, для доступа к определению вам нужно #define _GNU_SOURCE как есть Linux -специфическая c. Обратите внимание, что определение должно go перед включать любой заголовок lib c, а не только перед fcntl.h.

...