Мне нужна помощь, чтобы ввести файл кусками в Mmap - PullRequest
3 голосов
/ 17 апреля 2011

Я пытаюсь использовать mmap для чтения файла, используя куски 1024.

Вот фрагмент кода ....

numberOfBuffers = filesize / buffersize;
if (filesize % buffersize) 
{
  numberOfBuffers++;       
}

for (i = 0; i < numberOfBuffers; i++) {
    if((map = mmap(NULL, buffersize, PROT_READ, MAP_PRIVATE, fd, i * buffersize)) == MAP_FAILED) {
        perror("map failed");
    }

    if(munmap(map, buffersize) == -1) {
            perror("unmap failed");
    }
 }

Я получаю «недопустимый аргумент»ошибка на второй итерации.

Я хочу понять mmap и узнать, как перебрать mmap с определенным размером буфера.

1 Ответ

5 голосов
/ 17 апреля 2011

со страницы руководства mmap:

смещение должно быть кратным размеру страницы, возвращаемому sysconf (_SC_PAGE_SIZE).

Размер страницы на многих, если системы (особенно x86), составляет 4 КБ (4096 байт). Таким образом, первый вызов будет успешным (со смещением 0), но второй вызов не будет выполнен (смещение 1024 недопустимо).

Попробуйте изменить размер чанка на 4096 (или любой другой размер страницы на вашей платформе, или лучше, используйте sysconf, чтобы получить эту информацию).

...