我需要帮助将块中的文件输入到mmap中

时间:2011-04-16 23:37:45

标签: c mmap

我正在尝试使用mmap来使用1024的块来读取文件。

这是一个代码snippit ....

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 个答案:

答案 0 :(得分:5)

来自mmap手册页:

  

offset必须是sysconf(_SC_PAGE_SIZE)返回的页面大小的倍数。

如果系统(特别是x86)是4k(4096字节),

页面大小很多。因此第一次调用将成功(偏移0),但第二次调用将失败(偏移1024无效)。

尝试将块大小更改为4096(或平台上的页面大小,或者更好,使用sysconf获取该信息)。