gpt4 book ai didi

c - 我需要帮助将文件分块输入到 mmap

转载 作者:行者123 更新时间:2023-12-04 09:10:59 25 4
gpt4 key购买 nike

我正在尝试使用 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 的帮助。

最佳答案

来自 mmap手册页:

offset must be a multiple of the page size as returned by sysconf(_SC_PAGE_SIZE).



如果系统(特别是 x86)为 4k(4096 字节),则很多页面大小。所以第一次调用会成功(偏移量为 0),但第二次调用会失败(偏移量 1024 无效)。

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

关于c - 我需要帮助将文件分块输入到 mmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5690418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com