Wie am besten Swap-File implementieren

the_lorn

Mitglied
Hallo Leute!

Ich habe ein mittleres Problem!
Ich möchte für meine eigene kleine Speicherverwaltung ein Swap-File implementieren.
Um aber die Datei zu veränderen also den Inhalt zu schreiben ohne alte Daten zu löschen
muesste ich das Swap-File vor dem Schreiben einlesen und die gelesenen Daten anschliessend änderen und das alles wieder in das Swap-File schreiben. Wenn mein
Swap-File aber größen von z.B. 256 MB annimmt brauch ich ja ewig um die Daten zu lesen und das anschließende schreiben dauert noch mal so lang!
Ich versuchte es mit fstream hinzubekommen aber da hab ich wohl meinen Meister gefunden! ;-]

Die frage ist nun gibt es eine Möglichkeit Daten in einer Datei zu verändern ohne das ganze Ding vorher einlesen zu müssen?

Oder wie löst man das Problem am besten?

kann mir einer von euch vielleicht einen Tip geben?

gruß the_lorn
 
Hi Tobias!

Deine Frage ist mir nicht kanz klar! Was willst genau wissen?
Ich reserviere mir mit sbrk(x) speicher in dem ich schreiben darf. Das programm bzw. dem Nutzer spiel ich vor er hat x+irgdwas an Speicher zur Verfügung. Wenn er jetzt also mehr Speicher verwendet lagere ich das alles ins SwapFile aus und leg nur das in den Bereich von x was er grad verwendet.

Mir geht es eigentlich nur darum, wie ich ich einer txt Datei auf der Festplatte Daten reinschreiben kann - sagen wir an stelle 4096 5byte ersetzen ohne die Daten vorher und danach - also 0-4095 und 5002-eof - zu überschreiben bzw. zu löschen und ohne das ganze file vorher erneut einlesen zumüssen!

jetzt besser klar was ich will


gruss the_lorn
 
moin


Guck dir mal was über Heap und Stack an, dann weisst du was ich meinte.
Mir wäre nciht bekannt wie man in eine Datei "mittenrein" etwas schreiben kann, ohne das anderes überschrieben wird. Du würdest erst den Rest rauskopieren müssen und dann wieder anhängen.


mfg
umbrasaxum
 
moin, moin

Aber genau das Rauslesen wollte ich vermeiden, weil es ewig dauern kann. Das Prog wird total lam!

Aber ich hab da ne Möglichkeit gefunden. Ich nehm jetzt pwrite() und damit scheint es zu fuktionieren. Erste Tests waren zumindest erfolgreich.

Danke nochmal für deine Mühen!
 
Zurück