ARM64 Macbook调用mmap出现Bad file descriptor错误如何解决?
修复ARM64 macOS上mmap匿名映射的Bad file descriptor错误
你的问题出在mmap调用的flags参数不完整,POSIX标准要求mmap必须指定MAP_PRIVATE或MAP_SHARED标志,macOS(包括ARM64架构的)严格执行这一规则,而你的调用只传了MAP_ANON,导致参数非法,触发Bad file descriptor错误。
修正后的代码
将flags参数补充MAP_PRIVATE(匿名映射通常用私有模式,不会与其他进程共享内存):
uint8_t *out = mmap(NULL, OUT_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
或者在macOS上也可以使用MAP_ANONYMOUS(是MAP_ANON的别名,效果完全一致):
uint8_t *out = mmap(NULL, OUT_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
额外提示
- 调用mmap后一定要检查返回值是否为
MAP_FAILED,结合perror可以更直观地排查错误:if (out == MAP_FAILED) { perror("mmap failed"); exit(EXIT_FAILURE); } - 确保
OUT_SIZE是正数,虽然macOS会自动将大小对齐到页面边界,但传入0会直接导致调用失败。
内容的提问来源于stack exchange,提问作者ishaangupte
相关产品推荐
相关产品推荐

