•  Back 
  •  Der Aufbau eines DFS 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
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