uint8_t *out = mmap(NULL, OUT_SIZE, MAP_ANON, PROT_READ | PROT_WRITE, -1, 0);我在ARM64 MacBook上运行这行代码,一直得到Bad file descriptor。我没有试图Map文件,那么我如何修复这个问题呢?
uint8_t *out = mmap(NULL, OUT_SIZE, MAP_ANON, PROT_READ | PROT_WRITE, -1, 0);
Bad file descriptor
bis0qfac1#
您似乎将prot参数与flags参数颠倒了。因此,mmap()可能认为您正在尝试Map一个真实的文件,因此期望给定的文件描述符有效。当然,-1不是有效的文件描述符。您想要的呼叫可能是:
prot
flags
mmap()
uint8_t *out = mmap(NULL, OUT_SIZE, PROT_READ | PROT_WRITE, MAP_ANON, -1, 0);
注意:我突然想到,检测到这种类型的错误是一个很好的理由,约定(或要求,在某些实现中)的文件描述符被指定为-1的匿名Map。
1条答案
按热度按时间bis0qfac1#
您似乎将
prot
参数与flags
参数颠倒了。因此,mmap()
可能认为您正在尝试Map一个真实的文件,因此期望给定的文件描述符有效。当然,-1不是有效的文件描述符。您想要的呼叫可能是:
注意:我突然想到,检测到这种类型的错误是一个很好的理由,约定(或要求,在某些实现中)的文件描述符被指定为-1的匿名Map。