首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mmap()返回EINVAL

mmap()返回EINVAL
EN

Stack Overflow用户
提问于 2012-04-10 12:38:20
回答 2查看 3.5K关注 0票数 5

我无法让mmap函数工作。它返回EINVAL错误代码。

代码语言:javascript
复制
void* mapped = 
        mmap((void*)(map_addr + slide),
             map_size,
             PROT_WRITE | PROT_READ,
             MAP_PRIVATE | MAP_ANON,
             bprm->file,
             map_offset);

我已经在我的平台上检查了这个函数的文档(,达尔文,),似乎没有什么问题。mmap的手册页显示了返回EINVAL的四种情况。

代码语言:javascript
复制
 [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,所以它不是这样的。

代码语言:javascript
复制
 [EINVAL]           flags does not include either MAP_PRIVATE or MAP_SHARED.

MAP_PRIVATE出现了。

代码语言:javascript
复制
 [EINVAL]           The len argument was negative.

调用时的len (map_size)参数是8192。

代码语言:javascript
复制
 [EINVAL]           The offset argument was not page-aligned based on the page size as
                    returned by getpagesize(3).

偏移量参数(map_offset)为0,因此必须对齐页。(也许我错了?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-10 12:42:44

你确定你读到了第一个描述吗?它还可被理解为描述两个不相交的案件:

指定了

  1. MAP_FIXED,且addr参数未对页对齐,
  2. 或所需地址空间的一部分驻留在用户进程的有效地址空间之外。

如果像这样读取,map_addr + slide表达式的实际值就会变得有趣。

票数 2
EN

Stack Overflow用户

发布于 2012-04-10 12:44:41

我建议使用NULL作为addr参数,并让实现完全自由地放置您的mmaped区域(因为您指定的地址可能会在进程的地址空间方面出错),直到有一个严肃的理由不这样做为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10088962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档