-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. の最初の引数mmapvoid *、なので、を使用します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 に答える