Speicher als Datei adressieren

Herakles

Profifragensteller
Moin!

Ich möchte gern in ein und demselben Programm einen String in eine Datei schreiben und denselben wieder auslesen. Die Hürde dabei ist, dass diese Datei nicht auf ein permanentes Medium geschrieben werden soll, sondern in den flüchtigen Speicher. (Bitte nicht das Konzept hinterfragen - es MUSS in diesem Falle eben so gemacht werden :) )

Meine erste Idee war ein FIFO, dabei habe ich aber das Problem, dass beide Seiten gleichzeitig lesen und schreiben müssen, damit die Daten durchkommen. Wenn ich zuerst schreibe und dann Zeit X warte, um dann zu lesen, dann erhalte ich keine Daten. Ich müsste hier schon mit threads arbeiten, was ich nicht will.

Nach welchem Schlagwort also suche ich, wenn ich ZWINGEND aus einer Datei die Daten lesen will, diese aber nicht auf der Festplatte gespeichert werden sollen und ich die Daten in ein und demselben Programm erstelle? Kann ich mir Speicher so öffnen, als sei es eine Datei? Welche Schlagworte sollte ich als Suchhilfe nutzen?

Ich bin für jede Idee dankbar.

Herzlichst,
Herakles
 
shm_open(3) scheint wirklich einen Filedeskriptor zurückzugeben. Offenbar ist es das, was ich suche.

Danke, troll!
Herakles
 
Das scheint es nicht gewesen zu sein...

Ich kann zwar mit einem read(2) Daten herauslesen, aber ich kann kein erneutes open(2) durchführen - ich kann es also nicht als vollwertige Datei betrachten, womit mein Problem nicht gelöst ist. Ich sollte eine Daten öffnen können, in der ich dann meine Daten finde...

Weitere Ideen?
 
Moin!

Ich möchte gern in ein und demselben Programm einen String in eine Datei schreiben und denselben wieder auslesen. Die Hürde dabei ist, dass diese Datei nicht auf ein permanentes Medium geschrieben werden soll, sondern in den flüchtigen Speicher. (Bitte nicht das Konzept hinterfragen - es MUSS in diesem Falle eben so gemacht werden :) )

Ich machs trotzdem und bezweifle jetzt mal ganz stark, dass es so gemacht werden MUSS.

mmap(2) -- Das garantiert dir aber nicht, bei mehreren Aufrufen den gleichen Speicherbereich wiederzufinden.

Oder ein memory file system anlegen, dann hast du Garantie, brauchst aber root-Rechte.
 
Ok, ich habe es jetzt mit einem tmpfs gemacht, wie von Schläfer beschrieben. Das macht, was ich will.

Danke an alle!

Herakles
 
Ok, ich habe es jetzt mit einem tmpfs gemacht, wie von Schläfer beschrieben. Das macht, was ich will.

Ich kenne zwar tmpfs nicht (ist das FreeBSD?), aber bist Du Dir auch ganz sicher, dass das nicht auch mal rausgepaged werden kann? Das ist zumindest mit mfs unter OpenBSD so, und IIRC (vor etlichen Jahren) auch mit Linux-tmpfs.
 
Ja, kann es. Auch ist tmpfs unter FreeBSD aus sehr gutem Grund als hochgradig experimentell eingestuft. Es hat, diplomatisch ausgedrückt, eine gewisse Neigung dazu den Kernel zu Panic zu bringen. Das gute, alte MFS ist da die deutlich bessere Wahl. Dem kann man auch sagen, dass es bitte nicht nicht in die Swap soll. Wobei man da aufpassen muss, sich nicht durch einen zu großen Speicherverbrauch selbst den Hahn zuzudrehen.
 
Moin!

Ich habe unter Linux programmiert, daher das Spiel mit dem tmpfs. Ich wusste gar nicht, dass es das unter *BSD nicht gibt, bzw. unstabil ist. Da ich aber eine Migration auf OpenBSD in naher Zukunft plane, sind Eure Hinweise sehr hilfreich.

Dankeschön!

Herakles
 
Zurück
Oben