C语言 为什么我得到坏的文件描述符?

hwazgwia  于 2023-01-16  发布在  其他
关注(0)|答案(1)|浏览(186)

uint8_t *out = mmap(NULL, OUT_SIZE, MAP_ANON, PROT_READ | PROT_WRITE, -1, 0);
我在ARM64 MacBook上运行这行代码,一直得到Bad file descriptor。我没有试图Map文件,那么我如何修复这个问题呢?

bis0qfac

bis0qfac1#

您似乎将prot参数与flags参数颠倒了。因此,mmap()可能认为您正在尝试Map一个真实的文件,因此期望给定的文件描述符有效。当然,-1不是有效的文件描述符。
您想要的呼叫可能是:

uint8_t *out = mmap(NULL, OUT_SIZE, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);

注意:我突然想到,检测到这种类型的错误是一个很好的理由,约定(或要求,在某些实现中)的文件描述符被指定为-1的匿名Map。

相关问题