У меня есть программа, которая считывает из файла с использованием O_Direct. Файл непрерывно пишет другим процессом. Цикл чтения работает нормально, пока не достигнет точки, где происходит запись. На этом этапе read () терпит неудачу с Einval (неверный аргумент). Если я не использую o_direct, эта проблема не произойдет, и чтение возвращает допустимое значение.
Я подтвердил, что размер блока равен 4096. < /P>
Вот мой код: < /p>
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 524288 // 512 KB
int main() {
int fd;
char *buffer;
ssize_t bytesRead;
// Open file with O_DIRECT
fd = open("/data/file.lz4", O_RDONLY | O_DIRECT);
if (fd == -1) {
perror("Error opening file");
return EXIT_FAILURE;
}
// Allocate aligned memory for O_DIRECT
buffer = (char *) aligned_alloc(4096, BUFFER_SIZE);
// Read in a loop
while (1) {
bytesRead = read(fd, buffer, BUFFER_SIZE);
if (bytesRead == -1) {
std::cerr
Подробнее здесь: https://stackoverflow.com/questions/794 ... uously-wri