mmap无法分配内存 - 绝对不会内存不足

时间:2014-04-01 00:06:34

标签: c memory mmap

无论出于何种原因,我无法在C中使用mmap打开任何大小的文件。我可能遗漏了一些显而易见的内容,因此非常感谢您的建议。我搜索了类似的回复,并没有找到任何有用的东西。这是我的代码 - 是的,它非常简单。

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, const char * argv[])
{
void * data;
int fd;
struct stat sb;
fd = open("small.txt", O_RDONLY);

data = mmap(0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
if (data == MAP_FAILED) perror("mmap");

return 0;
}

small.txt是一个非常小的文本文件,大小为4.0 K.正在运行的特定机器具有大量RAM(> 500G)。记忆不是问题所在。我意识到这是我正在做的事情,如果你能为我指出,我将非常感激。

我得到的错误是&#34; mmap:无法分配内存&#34;

1 个答案:

答案 0 :(得分:0)

也许您可以使用此代码,请参阅此链接:http://man7.org/linux/man-pages/man2/mmap.2.html

int fd;
struct stat sb;
fd = open("small.txt", O_RDONLY);

if (fstat(fd, &sb) == -1)           /* To obtain file size */
    handle_error("fstat");