簡體   English   中英

mmap無效參數錯誤

[英]mmap invalid argument error

這是我第一次使用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 ;
}

您需要在標志中至少指定MAP_PRIVATEMAP_SHARED之一。 另外,正如另一個答案所說,您應該將-1作為可移植性的文件描述符,但這不是您的問題所在(因為您使用linux標記了這個問題,而linux忽略了匿名映射的文件描述符)。

您正在傳遞0作為文件描述符。 匿名映射應始終使用-1作為文件描述符,因為它們沒有文件支持。 另外,正如另一個答案所說, MAP_ANONYMOUS應該由MAP_PRIVATEMAP_SHARED來補充。

正確的調用方式是:

int *map = mmap(0, length, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

注意,因為mmap返回void *所以不需要mmap

您指定了不正確的標志和文件描述符。 您想要的是匿名(無文件支持)映射。 如果是這樣,正確的調用將是:

int *map = mmap(0, length, PROT_READ|PROT_WRITE, MAP PRIVATE|MAP_ANONYMOUS, -1, 0);

MAP_ANONYMOUS標志告訴Linux沒有文件。 並且您應該為文件描述符傳遞-1,而不是0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM