mmap 无效参数错误

krl*_*krl 3 c linux

这是我第一次使用 mmap 系统调用。我收到无效参数错误,我不明白为什么,显然我遗漏了一些东西,请帮助我,谢谢

#include <stdio.h>
#include <sys/mman.h>


int main() {

    long pageSize = getpagesize () ; 

    size_t length = 4096 ;


    int * map = (int * ) mmap ( 0 , length , PROT_READ | PROT_WRITE , MAP_ANONYMOUS , 0 , 0 ) ; 
        if ( map == MAP_FAILED ) {

            perror ( " error mapping " ) ;

        }

    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

Art*_*Art 6

您需要在标志中至少指定MAP_PRIVATEMAP_SHARED之一。此外,正如另一个答案所说,您应该将 -1 作为可移植性的文件描述符,但这不是您的问题所在(因为您用 linux 标记了这个问题,而 linux 忽略了匿名映射的文件描述符)。

  • 我想知道为什么 `man mmap` 没有明确提到需要 `MAP_ [PRIVATE|SHARED]`,而不是关于“恰好一个”的不太清楚的解释,这在略读时很容易被掩盖。 (2认同)