-1

我正在尝试从一个非常大的二进制文件中读取数据并使用内存映射对其进行处理,因此可以逐字节读取它。我在执行此操作时遇到了一些编译器错误,我无法弄清楚是什么原因造成的。为了记录,我在 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

我做错了什么,我能做些什么来解决它?

4

1 回答 1

1

几个错误,如果这确实是失败的段代码:

  1. O_RDONLY需要fcntl.h包括在内。
  2. 代码是在任何函数之外定义的。
  3. 的第一个参数mmap是 a void *,所以只需使用NULL.
  4. 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);
}
于 2012-04-15T05:49:20.273 回答