c - 如何从 C 中的 mmap 区域获取固定大小的缓冲区?

标签 c io mmap

接下来我想做的是: 我有一个巨大的文件(超过 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/

相关文章:

c - 拦截64位Linux内核函数: Length of a function pointer at 32/64-bit?

java - Scala Source.fromFile 内存消耗

io - 从模板执行中过滤掉损坏的管道错误

mongodb - 如何配置 Mongodb 的缓存大小?

c++ - 试图用 mmap 引起段错误

linux - mmap:在用户空间中映射一个用 kmalloc 分配的内核缓冲区

c - 你写过很长的函数吗?如果是这样,为什么?

c - 在没有 int i = 0 的情况下循环做某事 n 次?

c++ - 将 Arduino 库从 Arduino 0023 转换为 1.0 时遇到问题

java - 如何将十六进制文件转换为二进制数组 Android,Java