🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#1539
Author: Alfred Fent
Date: Sun, 05 Nov 1995 12:58
48 lines
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?
#1570
Author: Christian Stieber
Date: Mon, 06 Nov 1995 20:36
28 lines
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?
#1588
Author: Alfred Fent
Date: Tue, 07 Nov 1995 09:26
42 lines
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?
#1596
Author: Oliver Wagner
Date: Tue, 07 Nov 1995 15:23
24 lines
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