C 我需要帮助将一个文件分块输入mmap

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

我正在尝试使用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");
    }
 }
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或倍数,它就工作了。谢谢你的帮助。我现在更明白这一点了。