我想将文件的某些部分映射到内存中,为此我必须使用 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。什么论据是无效的?有办法看到吗?