gpt4 book ai didi

c - mmap() 返回 EINVAL

转载 作者:太空狗 更新时间:2023-10-29 15:07:32 24 4
gpt4 key购买 nike

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

void* mapped = 
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);

我已经在我的平台(Darwin)上查看了这个功能的文档,似乎没有任何问题。 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,因此它必须是页面对齐的。 (也许我错了?)

最佳答案

您确定阅读了第一个描述吗?它也可以理解为描述两个不相交的情况:

  1. 指定了 MAP_FIXED 并且 addr 参数没有页面对齐,
  2. 或部分所需地址空间位于用户进程的有效地址空间之外。

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

关于c - mmap() 返回 EINVAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com