Использование необъявленного идентификатора 'O_DIRECT' - PullRequest
1 голос
/ 21 марта 2019

Apple LLVM версия 10.0.0 (clang-1000.10.44.4)
Цель: x86_64-apple-darwin18.0.0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

#define _GNU_SOURCE
#define __USE_GNU 1
#include <fcntl.h>


int main()
{
    int fd = open("./test.txt", O_WRONLY|O_DIRECT);

    close(fd);

    return 0;
}

Я использую clang -o out test.c и получаю следующий результат:

test.c:14:39: error: use of undeclared identifier 'O_DIRECT'
    int fd = open("./test.txt", O_WRONLY|O_DIRECT);

Как мне решить проблему?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Подводя итог

Для LINUX должен быть включен флаг O_DIRECT.Для Mac OSX O_DIRECT недоступно.Вместо этого fcntl(fd, F_NOCACHE, 1) выглядит как каноническое решение, где fd - файловый дескриптор файла.Для Windows есть флаг с именем FILE_FLAG_NO_BUFFERING в качестве аналога в Windows O_DIRECT

Ссылка здесь

0 голосов
/ 21 марта 2019

С помощью этого фрагмента невозможно определить, что вы пытаетесь сделать, но, как правило, не используйте нестандартные приложения в приложениях, предназначенных для переноса.

Переносимый способ выполнить вашу задачу - вероятно fsync.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...