Короче, Линус сказал, что O_DIRECT - это плохо и неправильно
(http://lkml.org/lkml/2007/1/10/233), посему у меня вопрос: как это
делать правильно сэмулировать на posix_fadvise? Требуется сделать так,
чтобы ядро НЕ кэшировало файл при его чтении.
Следующий код не работает:
if ((fd_in = open64(argv[1], O_RDONLY | O_LARGEFILE)) == -1) {
printf("Error: source file can't be open\n");
perror("open() ");
return 3;
}
posix_fadvise(fd_in, 0, filesize(argv[1]), POSIX_FADV_NOREUSE);
Далее файл читается в память, но ядро всё равно забивает пямять его
кэшем.
Зато работает следующий код:
if ((fd_in = open64(argv[1], O_RDONLY | O_LARGEFILE | O_DIRECT)) == -1) {
printf("Error: source file can't be open\n");
perror("open() ");
return 3;
}
(filesize можно заменить на 0 на ядрах > 2.6.6)