open () не работает с флагом O_DIRECT на UBUNTU

Я пытаюсь открыть файл с флагом O_DIRECT. В Ubuntu программа завершается с ошибкой 22. Я только что установил Fedora на ту же машину с двойной загрузкой, и этот точно такой же код работает там без проблем.

Я использую Ubuntu 13.10 с ядром 3.12.6 и g ++ версии 4.8.1 и файловой системой ext4. Fedora, которую я только что установил, является версией 20 с ядром 3.12.6.

#include <unistd.h>
#include <fcntl.h>
#include <iostream>
#include <errno.h>

using namespace std;

int main(void)
{
int filedesc = open("testfile.txt", O_RDWR | O_CREAT | O_APPEND | O_DIRECT);
if (filedesc < 0) {
std::cout << "fail with errno: " << errno << std::endl;
return -1;
}
return 0;
}

5

Решение

Возможно, у вас включена функция журналирования данных ext4. С данными, ведущимися в журнале, пишет должен быть в буфере (подумайте об этом), так O_DIRECT потерпит неудачу с EINVAL,

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector