•  Back 
  •  Der Aufbau eines XFS 
  •  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.21.2.18  xfs_fopen                                              TOS

 Name:         »xfs_fopen« - öffnet oder erstellt eine Datei.

 Parameter:

                a0 =     DD *
                a1 =     char *name (ohne Pfad)
                d0 =     int omode (fürs Öffnen)
                d1 =     int attrib (fürs Erstellen)
                -> d0 =  FD * oder Fehlercode
                -> a0 =  SYMLINK *

 Beschreibung: Wird für die Funktionen Fopen und Fcreate verwendet. 
               Der Open-Modus ist im niederwertigen Byte anders als in 
               MiNT, weil die MiNT-Modi für die Implementierung der 
               Abfragen ungünstig sind. Beim Aufrufen von Fopen über 
               Trap #1 werden die MiNT-Modi vom Kernel in die internen 
               Modi konvertiert. Hier die internen Modi, die vom XFS- 
               Treiber bearbeitet werden müssen (NOINHERIT wird nicht 
               unterstützt, weil nach TOS-Konvention nur die Handles 
               0..5 vererbt werden). Ansonsten entspricht das HiByte 
               den MiNT-Konventionen:

               OM_RPERM   EQU  1   // Datei ist zum Lesen geöffnet
               OM_WPERM   EQU  2   // Datei ist zum Schreiben geöffnet
               OM_EXEC    EQU  4   // Datei ist zum Ausführen geöffnet
               OM_APPEND  EQU  8   // Schreibzugriffe ans Ende (Kernel!)
               OM_RDENY   EQU  16  // andere dürfen nicht gleichz. lesen
               OM_WDENY   EQU  32  // "" "" nicht gleichz. schreiben
               OM_NOCHECK EQU  64  // KEINE Überprüfung durch den Kernel

               Das Bit OM_APPEND wird vom Kernel bei Aufruf von 
               Fwrite() automatisch beachtet, der Kernel führt vor 
               jedem Schreibzugriff ein Fseek() aus.

               OM_NOCHECK wird vom Kernel gesetzt, wenn eine Datei als 
               Device, d.h. als Handle -1,-2,-3 oder -4 geöffnet bzw. 
               auf ein solches Handle umgelenkt (Fforce) wird. Ist 
               dieses Bit gesetzt, sollte das XFS keine Prüfung auf 
               mehrfaches Öffnen der Datei machen (siehe auch unten 
               bei fd_mode), sondern dies dem Gerätetreiber 
               überlassen.

               Hier die Bits, die wie im MiNT verwendet werden:

               O_CREAT EQU  $200 // Datei erstellen, falls nicht existiert
               O_TRUNC EQU  $400 // Datei leeren, falls existiert
               O_EXCL  EQU  $800 // nicht öffnen, falls existiert

               Der Kernel führt Fcreate aus als Fopen (O_CREAT +O_RDWR 
               + O_TRUNC). O_COMPAT (d.h. nur der TOS-Modus 0,1 oder 2 
               angegeben, ist in MagiC immer gleichbedeutend mit 
               O_WDENY.

               Die Überprüfung der Zugriffsrechte obliegt vollständig 
               dem XFS, der Kernel tut nichts. Das wäre auch wenig 
               sinnvoll, da jedes Dateisystem seine eigenen 
               Mechanismen und Rechte hat. Zurückgegeben wird dem 
               Kernel ein Zeiger auf einen geöffneten FD, d.h. das 
               Öffnen des Dateitreibers muß vom XFS durchgeführt 
               werden. Der Referenzzähler des zurückgegebenen FDs ist 
               vom XFS zu erhöhen bzw. beim ersten Öffnen auf 1 zu 
               initialisieren. Für symbolische Links und Diskwechsel 
               gilt dasselbe wie bei xfs_sfirst.

               Fopen wird unter MiNT folgendermaßen zurückgeführt:

                 1. per <lookup> Konvertierung pathname->fcookie
                 2. per <getxattr> Ermittlung der Zugriffsrechte
                 3. Test der Zugriffsrechte durch den Kernel
                 4. per <getdev> Ermittlung des Dateitreibers
                 5. per <getdev->open> Öffnen der Datei

               Dieses Verfahren ist sehr langwierig. DOS gibt beim 
               Suchen der Datei bereits einen Zeiger auf den 32-Byte- 
               Verzeichniseintrag zurück, der direkt zum Überprüfen 
               des Attributs und damit der Zugriffsrechte und auch zum 
               Öffnen der Datei dient. MagiC erwartet daher direkt die 
               Implementation des Fopen-Befehls mit allen 
               Überprüfungen der Zugriffsrechte. Zurückgeliefert wird 
               eine FD-Struktur, in die der Dateitreiber eingetragen 
               und geöffnet wurde.

 Gruppe:       Aufbau eines XFS

 Querverweis:  XFS-Konzept in MagiC