C 我需要帮助将一个文件分块输入mmap
我正在尝试使用mmap读取1024块的文件 这是一个代码剪贴画C 我需要帮助将一个文件分块输入mmap,c,mmap,C,Mmap,我正在尝试使用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 * buff
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");
}
}
numberOfBuffers=filesize/buffersize;
如果(文件大小%buffersize)
{
numberOfBuffers++;
}
对于(i=0;i
我在第二次迭代中遇到“非法参数”错误
我希望了解mmap,并寻求有关如何使用定义的缓冲区大小在mmap上迭代的帮助。来自
mmap
手册页:
偏移量必须是sysconf返回的页面大小的倍数(_SC_page_size)
如果系统(尤其是x86)的页面大小为4k(4096字节),则很多系统上的页面大小都是相同的。因此,第一次调用将成功(偏移量为0),但第二次调用将失败(偏移量1024无效)
尝试将区块大小更改为4096(或者无论平台上的页面大小如何,或者更好,使用
sysconf
获取该信息)。“…似乎是…”-不要猜测,请确保。我认为if(numberOfBuffers%buffersize)
应该是if(fileSize%buffersize)
对不起。。。我在第一个if语句之后有一个print语句,它只打印了一次,然后我得到了“非法参数”错误。就是这样,一旦我使用了4096或倍数,它就工作了。谢谢你的帮助。我现在更明白这一点了。