Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File11.20.1.4 dfs_drv_close TOS Name: »dfs_drv_close« Parameter: d0 = int mode a0 = DMD *d -> d0 = long errcode Beschreibung: Auch diese Funktion erfüllt, abhängig vom <mode>, zwei Aufgaben: 1. mode == 0: Das DOS_XFS fragt das DFS, ob das Laufwerk geschlossen werden darf. Wenn dies nicht erlaubt ist, muß EACCDN geliefert werden, sonst E_OK (nötig z.B. für Dlock()). Geöffnete Dateien wurden bereits von Kernel und DOS_XFS erkannt, d.h. in solch einem Fall wird dfs_drv_close überhaupt nicht aufgerufen. Aus diesem Grund dürften i.A. keine veränderten Sektorpuffer existieren, auch keine, die gerade gelesen oder beschrieben werden (dies geschieht immer über Dateien!). In diesem Fall genügt es also, immer ein E_OK zu liefern. Problematischer wird es, wenn man einen Write-Back-Cache einsetzt. Dabei kann es vorkommen, daß keine Datei mehr geöffnet ist, aber noch Puffer belegt sind und zurückgeschrieben werden müssen. Der Kernel macht einen Sync-Aufruf (xfs_sync, der weitergegeben wird an dfs_sync), bevor die Anfrage gestellt wird; es dürften also keine veränderten Puffer mehr existieren. Falls doch, sollte das DFS aus Sicherheitsgründen ein EACCDN zurückliefern. 2. mode == 1: Das DOS_XFS erzwingt das Schließen, das DFS muß E_OK liefern. Es dürfen keine Caches zurückgeschrieben werden, da das Laufwerk bereits ungültig ist. (nachdem ein Diskwechsel bereits gemeldet wurde). Beim Dlock() wird dfs_drv_close() zunächst mit Modus 0, dann, wenn es keinen Fehler gegeben hat, mit Modus 1 aufgerufen. Diese Vorgehensweise wird auch dann durchgeführt, wenn einmal ein Mechanismus eingebaut wird, der den Auswurfknopf von Wechselplattenlaufwerken oder CD-ROM abfragt und ggf. den Auswurf verweigert. Gruppe: Aufbau eines DFS Querverweis: DFS-Konzept in MagiC