我想映射文件的某些部分到內存中,爲此我必須使用mmap()。 (項目的REC t) 我打開該文件:mmap()總是返回-1
file = open(fileName, O_RDWR, 0)
和它打開regulary(文件!= -1)。
然後,內爲(),我嘗試配圖:
char *res;
res = (char*)mmap((void*)sectionHeads[i].adr, sectionHeads[i].size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, file, sectionHeads[i].offset);
sectionHead包含地址ADR(INT)等。但我總是得到-1。我檢查了一下,那部分內存應該是免費的。我究竟做錯了什麼?
注意:這是我第一次使用mmap(),稍後我會考慮標誌,但現在我只想映射如果只有一個節。部分包含有效值,再次檢查。
更新:建議我打電話perror ("mmap error");
看看錯誤是什麼,我得到mmap error: Invalid argument
。第一部分頭的adr值,大小和偏移量爲:adr = 8154 size = 13 offset = 154。我也拋出了MAP_ANON。什麼論據是無效的?有沒有辦法看到這個?
因此,請檢查'errno'。 – kirelagin
要添加到@ kirelagin的評論:只要你檢測到'mmap()'已經返回-1,即'perror(「mmap error」),就調用'perror()'' - 它會告訴你什麼錯誤代碼是。 –