我想映射文件的某些部分到内存中,为此我必须使用mmap()。 (项目的REC t) 我打开该文件:mmap()总是返回-1
file = open(fileName, O_RDWR, 0)
和它打开regulary(文件!= -1)。
然后,内为(),我尝试配图:
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
。第一部分头的adr值,大小和偏移量为:adr = 8154 size = 13 offset = 154。我也抛出了MAP_ANON。什么论据是无效的?有没有办法看到这个?
因此,请检查'errno'。 – kirelagin
要添加到@ kirelagin的评论:只要你检测到'mmap()'已经返回-1,即'perror(“mmap error”),就调用'perror()'' - 它会告诉你什么错误代码是。 –