devs[] serial, i2c und ide block devices fds[] living Files Dateien können read-only mehrfach geöffnet werden: --> mehrere File-Instanzen. Directories werden immer nur read-only geöffnet. --> man kann sich ohne Rücksicht durch den Verzeichnisbaum bewegen. Beim Schreiben in Directories werden diese kurzzeitig write-enabled. Dabei müssen alle 'Klone' gesucht und aktualisiert werden: insbes. buffer[] und fpos! BlockDevices sind implizit gemountet, wenn sie ein FS haben: Beim Booten wird das FS ermittelt und im NodeType ein Bit für FS und für 'wide' gesetzt. Ggf. kann das auch durch ein manuelles 'mount blockdevname' erfolgen. FD open("path", flags) 'open' liefert einen FD: ein Device, eine normale Datei oder ein Directory. Der Pfad muss absolut sein. Files werden in fds[] eingetragen idR.: 'open' ruft 'getroot' und macht dann mit 'select' weiter. "devname:" raw device "ide2A:" oder "sio2B:" BlockDevice and mode = RawDevice or device other than BlockDevice "devname:" "devname:/" root dir "ide2A:/" oder device als file, falls kein FS gefunden "devname:/xyz" absoluter Pfad "ide2A:/pub/foomatic" note: die Gui/Shell kann einen FS-Namen (Rootdir-Namen) erkennen und für den Aufruf durch den Devicenamen ersetzen. bool File.select(File¢ dir, "path", flags) 'myfile.select()' ersetzt sich durch eine andere Datei oder Directory. Der Pfad kann relativ sein. Das File wird nicht in fds[] eingetragen, weil es da schon drin steht. Mit 'select' kann nicht auf ein anderes Device gewechselt werden. "xyz" relativ "/xyz" absolut ab root dir "../xyz" parent dir bool mydevice.close() nop bool myfile.close() sync buffer[] to disk dispose buffer[] remove File from fds[] File getroot(BlockDevice¢) öffnet das Device als File Liest den Dateianfang und prüft, ob es ein small oder ein wide FS ist Wenn ein FS erkannt wurde, wird mit 'select' auf das RootDir gewechselt. Wenn im BlockDevice schon das FS-Bit gesetzt ist, geht es ein bischen schneller. Als file.name wird der Rootdir-Name eingetragen.