[英]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_PRIVATE
或MAP_SHARED
之一。 另外,正如另一個答案所說,您應該將-1作為可移植性的文件描述符,但這不是您的問題所在(因為您使用linux標記了這個問題,而linux忽略了匿名映射的文件描述符)。
您正在傳遞0
作為文件描述符。 匿名映射應始終使用-1
作為文件描述符,因為它們沒有文件支持。 另外,正如另一個答案所說, MAP_ANONYMOUS
應該由MAP_PRIVATE
或MAP_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.