我想在C中使用mmap來查看它是如何工作的。目前我嘗試使用mmap逐字節讀取二進制文件。我的代碼是這樣的:在C中使用mmap讀取二進制文件時出現Segfault錯誤
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
int fd;
char *data;
for (int i = 1; i<argc; i++)
{
if(strcmp(argv[i],"-i")==0)
fd = open(argv[i+1],O_RDONLY);
}
data = mmap(NULL, 4000, PROT_READ, MAP_SHARED, fd, 8000);
int i = 0;
notation = data [i];
// ......
}
當我嘗試記數法=數據[0]和我得到一個段錯誤時,我的問題發生。我相信二進制文件中的第一個字節也是一個字符。我的for循環檢查編譯時是否有-i標誌,如果有下一個參數應該是文件名。
確定該文件的大小至少爲8000字節?另外,手冊頁中提到「offset必須是由sysconf(_SC_PAGE_SIZE)返回的頁面大小的倍數」。作爲次要方面,您應該將fd初始化爲-1,以防用戶未指定-i參數,並且for循環應該循環到argc-1,否則您將訪問argv,超出了用戶指定的傳入參數 - 我作爲最後一個參數。 – EricS 2012-04-15 17:39:30