2012-04-15 10 views
0

Ich versuche, Daten aus einer sehr großen Binärdatei zu lesen und verarbeiten sie mithilfe von Speicherzuordnung, so dass es byteweise gelesen werden kann. Ich bekomme dabei ein paar Compiler-Fehler, und ich kann nicht herausfinden, was sie verursacht. Ich mache das auf einer Linux-Plattform, für die Aufzeichnung.Verwenden von Speicherabbildung in C zum Lesen binär

#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); 

Die Fehler, die ich bekommen sind wie folgt:

caddr nicht

initialisiert

R_RDONLY nicht initialisiert

Mmap hat zu wenige Argumente.

ich ein Makefile bin mit ihm zu kompilieren, die wie folgt aussieht:

all: order_book 
CC = gcc 
CFLAGS = -std=c99 

order_book: main.c 
    $(CC) $(CFLAGS) -o order_book main.c 
clean: 
    rm -f order_book 

Was mache ich falsch, und was kann ich tun, um es zu beheben?

+0

Es sieht aus wie Sie einen anderen Header-Datei enthalten müssen. Vielleicht "stdio.h" oder "stdlib.h"? –

+0

Ich hatte sie schon. Vergessen, sie in der Frage – AndroidDev93

+0

zu erwähnen Der Code, der fehlschlägt, ist genau derselbe wie oben. Ich benutze ein Makefile, um mein Programm zu kompilieren. Ich habe den Inhalt in der obigen Frage Box gezeigt – AndroidDev93

Antwort

1

mehrere Fehler, wenn dies tatsächlich das gesamten Stück Code, das fehlschlägt:

  1. O_RDONLYfcntl.h aufgenommen werden muss.
  2. Der Code wird außerhalb jeder Funktion definiert.
  3. Das erste Argument zu mmap ist ein void *, also verwenden Sie einfach NULL.
  4. pagesize ist nicht deklariert.

Folgende compiliert:

#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); 
} 
+0

Vielen Dank für die Lösung dieses Problems! Wenn ich nun versuche, auf Daten [0] zuzugreifen, bekomme ich einen Fehler. Muss ich etwas anderes tun, damit die Daten der Datei in die Char-Zeigerdaten kopiert werden? – AndroidDev93

+0

Sie müssen alle Rückkehrcodes überprüfen (aus 'open',' mmap' und anderen Funktionsaufrufen), um sicherzugehen, dass sie erfolgreich waren. Überprüfen Sie die Manpage für "mmap" bei http://linux.die.net/man/2/mmap für ein vollständiges Beispiel. –