我正在尝试从非常大的二进制文件中读取数据并使用内存映射来处理它,因此可以逐字节读取它。我这样做时会遇到一些编译器错误,我无法弄清楚导致它们的原因。我在Linux平台上这样做,以备记录。
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include<stdio.h>
#include<stdlib.h>
int fd;
char *data;
fd = open("data.bin", O_RDONLY);
pagesize = 4000;
data = mmap((caddr_t)0, pagesize, PROT_READ, MAP_SHARED, fd, pagesize);
我得到的错误如下:
caddr未初始化
R_RDONLY未初始化
mmap的参数太少了。
我使用Makefile编译它,如下所示:
all: order_book
CC = gcc
CFLAGS = -std=c99
order_book: main.c
$(CC) $(CFLAGS) -o order_book main.c
clean:
rm -f order_book
我做错了什么,我该怎么做才能解决它?
答案 0 :(得分:1)
有几个错误,如果这确实是整个代码失败的话:
O_RDONLY
需要包含fcntl.h
。mmap
的第一个参数是void *
,因此只需使用NULL
。pagesize
未声明。以下编译:
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int fd;
char *data;
void main(int argc, char *argv[]) {
fd = open("data.bin", O_RDONLY);
int pagesize = 4000;
data = mmap(NULL, pagesize, PROT_READ, MAP_SHARED, fd, pagesize);
}