接下来我想做的是: 我有一个巨大的文件(超过 4GB)。我想映射它,然后从这个映射的 128 字节区域缓冲区中获取。我该怎么做?对于 mmap 文件,我使用这个:
int fd = open(file_name, O_RDONLY);
void* addr = mmap(0, /*ULONG_MAX*/100000000, PROT_READ, MAP_SHARED, fd, 0);
在这些字符串之后,我想获得上面描述的缓冲区,但我不知道如何做,而且我没有在网络上找到它。
附加信息:file_name 是文本文件。它包含字符串
UPD:我将尝试解释:我想映射文件,然后从映射区域中取出 128 字节(实际上是字符)并将其放入某个缓冲区。现在我使用下一个代码:
char buffer[128];
struct str* addr = mmap(0, /*ULONG_MAX*/128, PROT_READ, MAP_SHARED, fd, 0);
scanf((char*)addr, "%s", buffer);
printf("%s\n", buffer);
但它不起作用。所以我正在寻找解决方案。
最佳答案
成功 mmap
后,文件的内容(直到 mmap
的大小)在 addr
指向的内存区域中可用>。所以你可以这样做
memcpy(buffer, addr, 128);
关于c - 如何从 C 中的 mmap 区域获取固定大小的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15929502/