我无法让mmap函数工作。它返回EINVAL错误代码。
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);我已经在我的平台上检查了这个函数的文档(,达尔文,),似乎没有什么问题。mmap的手册页显示了返回EINVAL的四种情况。
[EINVAL] MAP_FIXED was specified and the addr argument was not page
aligned, or part of the desired address space resides out of the
valid address space for a user process.没有指定MAP_FIXED,所以它不是这样的。
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.MAP_PRIVATE出现了。
[EINVAL] The len argument was negative.调用时的len (map_size)参数是8192。
[EINVAL] The offset argument was not page-aligned based on the page size as
returned by getpagesize(3).偏移量参数(map_offset)为0,因此必须对齐页。(也许我错了?)
发布于 2012-04-10 12:42:44
你确定你读到了第一个描述吗?它还可被理解为描述两个不相交的案件:
指定了
如果像这样读取,map_addr + slide表达式的实际值就会变得有趣。
发布于 2012-04-10 12:44:41
我建议使用NULL作为addr参数,并让实现完全自由地放置您的mmaped区域(因为您指定的地址可能会在进程的地址空间方面出错),直到有一个严肃的理由不这样做为止。
https://stackoverflow.com/questions/10088962
复制相似问题