Thread View: de.comp.sys.amiga.tech
4 messages
4 total messages
Started by Alfred Fent
Sun, 05 Nov 1995 12:58
"Garantiertes" Schreiben auf Platte?
Author: Alfred Fent
Date: Sun, 05 Nov 1995 12:58
Date: Sun, 05 Nov 1995 12:58
48 lines
2364 bytes
2364 bytes
Hallo,
wie kann ich sicherstellen, dass Daten, die ich in ein File schreibe,
auch wirklich geschrieben werden und auch einen Reset oder Crash ueber-
stehen? Mein Problem ist, dass die geschriebenen Daten futsch sind,
wenn der Crash/Reset vor den Aufruf von Close(file) erfolgt. Ich haette
aber gerne eine Funktion, die mir "garantiert", dass, wenn sie beendet
ist, die Daten "sicher" sind und auch einen Crash ueberleben.
Die einzige Moeglichkeit, das zu erreichen, die ich bisher gefunden habe,
ist folgendes (in Pseudo-Code)
function save_write(file, data)
open(file)
seek(file,end)
write(file,data)
close(file)
end-function
Das Problem dabei ist, dass, wenn die Funktion oft mit kleinen Daten-
mengen aufgerufen wird, die Schreibzeit gegenueber der Zeit fuer's
Close, Open (Suche im Directory, etc.) und Seek untergeht, d.h. das ge-
samte System wird durch die dauernden Open/Seek/Close stark gebremst. Was
ich also suche ist eine Dos-Funktion, die das gleiche tut wie Close,
die das File aber offen laesst, so dass ich mir die Open/Seek Aufrufe
sparen kann. Flush() habe ich bereits probiert, aber auch geflushte Daten
werden nach einem Crash vom Validator geloescht; ebenso bringt ein SetVBuf
mit Puffergroesse 0 Byte nichts :-(
Wer weiss Rat?
Danke
Alfred
PS: Ich weiss, dass das garantierte Schreiben eigentlich nicht moeglich
ist, weil z.B. ein Schreibcache eingerichtet sein koennte, weil
die Platte selbst die Daten puffern koennte, usw. Darum habe ich
"garantiert" auch in Anfuehrungszeichen geschrieben: mir reicht ein
"nach bestem Wissen und Gewissen"...
--
-------------------------------------------------------------------------------
-- multae causae sunt bibendi (Lat. Sprichwort) -- Alfred Fent ---
-- ergo bibamus! (Papst Martin IV) -- fent@fmi.uni-passau.de ---
-------------------------------------------------------------------------------
Re: "Garantiertes" Schreiben auf Platte?
Author: Christian Stieber
Date: Mon, 06 Nov 1995 20:36
Date: Mon, 06 Nov 1995 20:36
28 lines
1636 bytes
1636 bytes
Alfred Fent (fent@vogelweide.uni-passau.de) wrote: > wie kann ich sicherstellen, dass Daten, die ich in ein File schreibe, > auch wirklich geschrieben werden und auch einen Reset oder Crash ueber- > stehen? Garnicht, da Du nicht weisst was in der Kette Programm -> DOS -> Filesystem -> exec-Device -> Hostadapter -> Platte ueber integrierte Caches verfuegt. Soweit ist es also nicht moeglich. Du kannst DOS veranlassen ausstehende Daten zu schreiben indem Du Flush() benutzt, allerdings scheint das etwas daemlich implementiert zu sein: es liefert keine Fehler :( ?? Eventuell hilft ACTION_FLUSH; vielleicht solltest Du mal den Besitzer eines Guru-Books fragen was dieses Paket macht :) Fuer Datenbank-Engines ist es guenstig eine eigene Partition zu unterstuetzen (was mehrere Vorteile hat), aber fuer normale Programme ist das indiskutabel. Christian -- // Christian Stieber Stieber@Informatik.TU-Muenchen.de \// Certified Amiga Developer http://www.leo.org/~stieber/ -------------------------------------------------------------------------- Nobody, just nobody
Re: "Garantiertes" Schreiben auf Platte?
Author: Alfred Fent
Date: Tue, 07 Nov 1995 09:26
Date: Tue, 07 Nov 1995 09:26
42 lines
2461 bytes
2461 bytes
In article <47lrk9$ggt@sunsystem5.informatik.tu-muenchen.de>, stieber@Informatik.TU-Muenchen.DE (Christian Stieber) writes: |> Alfred Fent (fent@vogelweide.uni-passau.de) wrote: |> |> > wie kann ich sicherstellen, dass Daten, die ich in ein File schreibe, |> > auch wirklich geschrieben werden und auch einen Reset oder Crash ueber- |> > stehen? |> |> Garnicht, da Du nicht weisst was in der Kette Programm -> DOS -> |> Filesystem -> exec-Device -> Hostadapter -> Platte ueber integrierte |> Caches verfuegt. Das war mir klar, siehe auch das PS meines Postings. |> Soweit ist es also nicht moeglich. Du kannst DOS veranlassen ausstehende |> Daten zu schreiben indem Du Flush() benutzt, allerdings scheint das |> etwas daemlich implementiert zu sein: es liefert keine Fehler :( ?? |> Eventuell hilft ACTION_FLUSH; vielleicht solltest Du mal den Besitzer |> eines Guru-Books fragen was dieses Paket macht :) Hm,... quasi auf Packet-Ebene... Die Idee ist nicht schlecht (haett' ich auch selbst draufkommen koennen ;-)) aber andererseits vermute ich, dass das DOS-Flush() auch nicht mehr macht als ein ACTION_FLUSH, und dass DOS-Flush() nicht das gewuenschte tut habe ich schon probiert. Aber probieren kost' ja nichts... |> Fuer Datenbank-Engines ist es guenstig eine eigene Partition zu |> unterstuetzen (was mehrere Vorteile hat), aber fuer normale Programme |> ist das indiskutabel. Bevor die Zugriffe ueber eine eigene Partition laufen sind noch viele viele andere Ecken abzufeilen, Bugs zu finden, Features zu implemen- tieren, etc. Das steht ganz unten auf der ToDo-List... Danke Alfred -- ------------------------------------------------------------------------------- -- multae causae sunt bibendi (Lat. Sprichwort) -- Alfred Fent --- -- ergo bibamus! (Papst Martin IV) -- fent@fmi.uni-passau.de --- -------------------------------------------------------------------------------
Re: "Garantiertes" Schreiben auf Platte?
Author: Oliver Wagner
Date: Tue, 07 Nov 1995 15:23
Date: Tue, 07 Nov 1995 15:23
24 lines
1444 bytes
1444 bytes
fent@vogelweide.uni-passau.de (Alfred Fent) wrote: >dass das DOS-Flush() auch nicht mehr macht als ein ACTION_FLUSH, und >dass DOS-Flush() nicht das gewuenschte tut habe ich schon probiert. Die Funktion dos.library/Flush() weisst das Dos-Interne Filehandle-Buffering an, Daten dieses Filehandles bitte sehr jetzt komplett, per ACTION_WRITE, an's Filesystem durchzureichen. Was das Filesystem dann macht, bleibt diesem Überlassen. Bei nichtgebufferten Filehandles (z.B. mit Write() statt FPrintf()/FWrite() etc. beschriebenen) hat Flush() keine Wirkung. Das Packet ACTION_FLUSH wiederum empfiehlt dem Filesystem, seine internen Buffer (welche auch immer) auf's Speichermedium zu befördern. Was genau dies wiederum bedeutet, liegt im Ermessen des Filesystem. Olli -- * Fuzzy Demonstrations-Zentrum, Dortmund * Phone: +49 231 / 9700-921 Fax: -929 * These are my personal opinions. * Home: owagner@lsd.wupper.de
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads