我正在尝试使用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的帮助。
答案 0 :(得分:5)
来自mmap
手册页:
如果系统(特别是x86)是4k(4096字节),offset必须是sysconf(_SC_PAGE_SIZE)返回的页面大小的倍数。
页面大小很多。因此第一次调用将成功(偏移0),但第二次调用将失败(偏移1024无效)。
尝试将块大小更改为4096(或平台上的页面大小,或者更好,使用sysconf
获取该信息)。