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 DateiAllerdings 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".
-
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.