Как записать входную память mmap в выходной файл O_DIRECT? - PullRequest
1 голос
/ 22 июня 2011

почему не работает псевдокод (O_DIRECT приводит к EFAULT)

in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file", O_DIRECT);
write(out_fd, in_mmap, PAGE_SIZE);

пока следует (без O_DIRECT)

in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file");
write(out_fd, in_mmap, PAGE_SIZE);

Я полагаю, это что-то со страниц виртуального ядра для страниц виртуальных пользователей, что не может быть переведено при вызове записи?

С уважением,

Friedrich

1 Ответ

0 голосов
/ 19 марта 2012

Использование mmap () с O_DIRECT сложно.Есть некоторые ограничения.Вывод в файл должен быть выровнен по блокам.Например, если вы установите смещение в mmap () равным 0, ваш код будет работать.Вы должны проверить размер блока вашей файловой системы, чтобы правильно установить это значение.

...