我试图在 C 中使用 mmap 只是为了看看它是如何工作的。目前我正在尝试使用 mmap 逐字节读取二进制文件。我的代码是这样的:
#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];
// ......
}
当我尝试 notation = data[0] 并且我得到一个 segfault 时,就会出现我的问题。我确信二进制文件中的第一个字节也是一个字符。我的 for 循环在编译时检查是否有 -i 标志,如果有下一个参数应该是文件名。