C ++ FILE ohne auf die Festplatte zu schreiben

8

Ich benutze eine Bibliothek, die ziemlich viele Funktionen hat, die in ein FILE schreiben, aber keines, das die gleichen Daten bequem an ein Objekt im Speicher ablegt. Gibt es eine Möglichkeit, ein FILE -Objekt zu erstellen (oder es außer Kraft zu setzen), das die Daten im Speicher speichert, anstatt auf die Festplatte zu schreiben - ich möchte den Leistungseinbruch beim Öffnen / Schreiben / Lesen von Dateien immer und immer wieder vermeiden .

UPDATE: nach Robs Vorschlag Stringstream ausprobieren:

%Vor%

Aber jetzt, wo ich versuche, die Daten (binär) aus dem Stringstream zu bekommen, muss ich feststecken - wie greife ich die Binärdaten, die ich hinzugefügt habe?

    
jn_pdx 02.05.2011, 17:36
quelle

5 Antworten

10

Neben den bereits erwähnten GNU's fmemopen() , welches in POSIX als open_memstream kann eine ähnliche Lösung durch Kombination von mmap() (unter Verwendung von MAP_ANONYMOUS) oder einer anderen betriebssystemspezifischen Funktion, die einen Dateideskriptor auf einen Speicherblock zurückgibt, und fdopen() erhalten werden.

EDIT: das war falsch, mmap erstellt keinen Dateideskriptor.

    
Cubbi 02.05.2011, 17:43
quelle
5

Die GNU-libc hat z. B. fmemopen , was Ihnen eine FILE * gibt, die in den Speicher schreibt. Probieren Sie man fmemopen auf Ihrem Linux-System für Details.

Ich vermute (aber ich bin mir nicht sicher), dass fmemopen ein Wrapper ist, der den von @Cubbi erwähnten Ansatz mmap / fdopen orchestriert.

    
Ernest Friedman-Hill 02.05.2011 17:40
quelle
2

Wenn Sie Mac OS X oder iOS verwenden, haben Sie keinen Zugriff auf fmemopen. Ich habe hier eine Lösung gefunden:

Ссылка

    
featherless 26.06.2012 19:26
quelle
1

Wenn Sie die Möglichkeit haben, Ihre Bibliothek zu ändern, könnten Sie C ++ - Streams anstelle von C FILE Streams verwenden.

Wenn Ihre alte Bibliotheksfunktion wie folgt aussieht:

%Vor%

Sie könnten diesen Code durch ersetzen:

%Vor%

Machen Sie dann in Ihrem Nicht-Bibliothekscode Folgendes:

%Vor%     
Robᵩ 02.05.2011 19:03
quelle
0

Ziehen Sie in Erwägung, tmpfs zu installieren und die Anwendung dazu schreiben zu lassen. Natürlich ist das nur * nix.

    
Alexander Gessler 02.05.2011 17:43
quelle

Tags und Links