Speicher in (virtuelle) Datei mappen



  • Hallo,
    wie man Dateien in den Speicher mappen kann, ist mir klar.

    Ich brauche jedoch die Umkehrung: ich habe einen Block im Speicher. Der Einfachheit halber

    unsigned char* memoryBlock;
    size_t memoryBlockSize = 42;
    

    Ich möchte gerne, dass ich auf den Inhalt von memoryBlock bis memoryBlock+memoryBlockSize-1 wie auf eine Datei (FILE*) lesend zugreifen kann - also insbesondere fread, fseek und feof darauf ausführen kann.

    Google konnte mir nichts dazu finden. Eine Möglichkeit, die prinzipiell funktionieren dürfte, wäre:
    - Erstelle neue temporäre Datei
    - Schreibe Inhalt des Speicherblocks in diese Datei
    - Benutze die temporäre Datei für die zu erledigenden Sachen
    - Schließe und lösche die temporäre Datei

    Allerdings halte ich dies für nicht elegant. Gibt es da eine bessere Möglichkeit? Falls die Lösungen für Linux/Unix und Windows unterschiedlich sein sollten, so wäre ich an beiden Lösungen interessiert.



  • Gibt es alles schon.
    Suche mal nach "mmap".



  • @Wutz

    Nach allem, was ich über mmap weiß, dient es dazu, Dateien in den Speicher zu mappen, während ich die umgekehrte Richtung brauche.

    Immerhin: durch mein soben Suchen, ob man mmap auch für die umgekehrte Richtung nutzen kann, bin ich auf eine Funktion fmemopen

    > http://linux.die.net/man/3/fmemopen

    gestoßen, die unter Linux das zu tun scheint, was sie soll. Leider scheint diese GNU-spezifisch zu sein. Ist dies tatsächlich der Fall? Wenn ja: gibt es einen POSIX-konformen Weg?

    Außerdem: wie macht man es unter Windows?



  • wolfgke schrieb:

    Leider scheint diese GNU-spezifisch zu sein. Ist dies tatsächlich der Fall? Wenn ja: gibt es einen POSIX-konformen Weg?

    Außerdem: wie macht man es unter Windows?

    Ist tatsächlich GNU- spezifisch, unter Windows (VCPP) gibts nur Ausweichen auf die Stringstreams von C++.
    Wie man das unter POSIX macht - keine Ahnung.
    Mir fällt nur eines ein: Selber schreiben -je nachdem, wieviel Du von dem Filezeugs brauchst, kann das ein Spaziergang oder Wüstenexpedition werden. 😉


Anmelden zum Antworten