O_Direct Read () не спускается с неверным аргументом при чтении из непрерывно написанного файлаLinux

Ответить
Anonymous
 O_Direct Read () не спускается с неверным аргументом при чтении из непрерывно написанного файла

Сообщение Anonymous »

У меня есть программа, которая считывает из файла с использованием 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»