blocks in gforth: Rolle des 0 BLOCK ?
Von: Michael Kalus (michael.kalus@onlinehome.de) [Profil]
Datum: 18.05.2008 20:34
Message-ID: <86d6cbb5-6668-4390-ba3f-ee1920272220@k13g2000hse.googlegroups.com>
Newsgroup: de.comp.lang.forth
Datum: 18.05.2008 20:34
Message-ID: <86d6cbb5-6668-4390-ba3f-ee1920272220@k13g2000hse.googlegroups.com>
Newsgroup: de.comp.lang.forth
Guten Abend. Habe ich die Struktur der Block files im gforth richtig verstanden? 12 bytes blockverwaltung, 1024 bytes daten, usw. Also records von 1036 bytes. Diese 12 bytes "Verwaltung" vor jedem Block gelistet sehen zb so aus: test2 0 0 0 0 0 - A0 0 DB E4 - FF FF FF FF - 1 0 0 0 1 - A0 0 DB E4 - 0 0 0 0 - 2 0 0 0 2 - A0 0 DB E4 - FF FF FF FF - 3 0 0 0 3 - A0 0 DB E4 - 0 0 0 0 - 4 0 0 0 4 - A0 0 DB E4 - 0 0 0 0 - 5 0 0 0 5 - A0 0 DB E4 - 0 0 0 0 - 6 0 0 0 6 - A0 0 DB E4 - 0 0 0 0 - 7 0 0 0 7 - A0 0 DB E4 - 0 0 0 0 - 8 0 0 0 8 - A0 0 DB E4 - 0 0 0 0 - 9 0 0 0 9 - A0 0 DB E4 - 0 0 0 0 - ok In der Quelle blocks.fs finde ich so was: struct cell% field buffer-block \ the block number cell% field buffer-fid \ the block's fid cell% field buffer-dirty \ the block dirty flag char% chars/block * field block-buffer \ the data cell% 0 * field next-buffer end-struct buffer-struct Also: Die ersten 4 bytes = cell enthalten wohl die Blocknummern für jeden Bock. Die mittlere Zelle bedeutet buffer-fid ? Die letzte Zelle scheint immer true oder false zu sein: block dirty flag, mit true = updated, null = not-updated. Nach einem FLUSH sind diese Zellen alle wieder NULL. Nur den o block verstehe ich nicht so ganz: Sein "block dirty flag" ist nur NULL, wenn das file frisch geholt wurde USE BLOCK.XXX und noch nicht wieder hineingeschrieben worden ist? Danach ändert auch ein FLUSH das "block dirty flag" vom 0 block nicht mehr? Erkennt gforth daran ob das file gesichert werden muss? Zusatzfragen: - Muss ich eigentlich das block file ausdrückllich wieder schließen zb fid close-file ? - Das was ich in den 0 block schreibe wird gar nicht ins file gesichert, dh der bleibt immer leer?? Wieder mal Fragen über Fragen. Für die Antworten meinen Dank. Grüße, Michael[ Auf dieses Posting antworten ]
