mmap()始终返回-1

时间:2013-05-31 14:02:17

标签: c file mmap

我想将文件的某些部分映射到内存中,为此我必须使用mmap()。 (项目要求) 我打开文件:

file = open(fileName, O_RDWR, 0)

它确实打开常规(文件!= -1)。

然后,在for()中,我尝试使用:

进行映射
char *res;
res = (char*)mmap((void*)sectionHeads[i].adr, sectionHeads[i].size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, file, sectionHeads[i].offset);

sectionHead包含地址的adr(int)等。但是我总是得到-1。我查了一下,那段记忆应该是免费的。我做错了什么?

注意:这是我第一次使用mmap(),稍后我会考虑标志,但是现在我只想映射一个部分。节包含有效值,请仔细检查。

更新:根据建议,我致电perror ("mmap error");以查看错误是什么,我得到mmap error: Invalid argument。第一个sectionHeads的adr,size和offset的值是:adr = 8154 size = 13 offset = 154。我也抛出了MAP_ANON。什么论点无效?有没有办法看到它?

1 个答案:

答案 0 :(得分:3)

你做错了不是检查究竟是什么问题。如果出现错误,mmap()不仅会返回MAP_FAILED(建议您使用-1代替},而且还会将errno设置为适当的值。因此,您可以自己检查errno或使用perror()打印错误说明,该说明可以回答您的问题(并节省大量时间;))。除此之外,仅在Linux上支持MAP_ANONYMOUSMAP_SHARED一起使用,因为内核2.4;也许你有一个旧版本的Linux内核?