Linux read systemcall не читает из файла

0

У меня есть программа C++, которая открывает файл с флагом O_DIRECT и записывает буфер размером 100 МБ в файл с системным вызовом записи. Программа определяет размер блока, равный 512, и выполняет следующие действия:

const int BLKSZ = 512;
const int MAXBUFSIZE = 100000000;

char buf[MAXBUFSIZE];// store data in this buffer and write it to file

size_t len;// number of bytes of buf is full

int fd = open(fName.c_str(), O_WRONLY | O_CREAT | O_APPEND | O_DIRECT , mode);

#ifdef DIRECTIO
        This->remNAligNum = len % BLKSZ;
        if(This->remNAligNum)
        {
            This->remNAlig = ((char *)buf + len);
            len -= This->remNAligNum;
        }
        else
            This->remNAlig = NULL;

#endif

char *buffOffset = (char *)buf;
int buffRem = len;
wr = 0;
while(1){
    buffOffset += wr;
    buffRem -= wr;
    if(!buffRem)
    break;
    wr = write(fd, buffOffset, buffRem));   
    usleep(5);
}

Этот код записывает данные в файл успешно, но в нижеприведенном коде системный вызов чтения не может читать данные из файла и возвращает -1.

const int BLKSZ = 512;
const int MAXBUFSIZE = 100000000;

char buf[MAXBUFSIZE];
char tmpbuf[BLKSZ];

int fd = open(fName.c_str(), O_RDONLY | O_DIRECT, mode);
int ret2 = read(fd, tmpbuf, BLKSZ);
  • 2
    read () вернул -1, что это за ошибка?
  • 0
    Вы проверили, удалось ли open() ? Если нет, то какой был код возврата? Каково было значение errno после вызова read() возвращавшего -1?
Показать ещё 5 комментариев
Теги:
file

2 ответа

0

Это решило! Проблема заключается в разрешении доступа к файлу.

0

Вызов close (fd) при записи полной (между while() и open (только чтение)).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню