Týndur/LostIO

Aus Lowlevel
Wechseln zu:Navigation,

Noch nicht brauchbar

LostIO ist der Name der Hauptschnittstelle, die LOST den Treibern zur Verfügung stellt. Das ganze basiert auf einer VFS-ähnlichen Konstruktion. Darauf kann mit den normalen Dateifunktionen zugegriffen werden. Die Pfade sind dabei folgendermassen aufgebaut: Treibername:/Pfad/teil.

Aufbau

Funktionen

LostIO

VFS-Baum

Typen

Verzeichnis

Ramfile

Beispiel

Hier folgen ausschnitte aus dem Quellcode des Diskettentreibers(Die Funktionen fuer den Laufwerkszugriff werden hier nicht gezeigt).

<c> int main(int argc, char* argv[]) {

   //Beim Init unter dem Namen "floppy" registrieren, damit die anderen
   //Prozesse den Treiber finden.
   init_service_register("floppy");
   
   //LostIO initialisieren(Ist nur bei den Treibern notwendig. Bei 
   //Anwendungen, die nur auf andere Treiber zugreifen wollen sollte
   //das weggelassen werden.
   lostio_init();
   
   //Hier werden 2 vordefinierte Typen benutzbar gemacht: 
   //Verzieichnise und Dateien, die den Inhalt direkt im RAM haben.
   //Dann muessen keine eigenen Handler registriert werden.
   lostio_type_ramfile_use();
   lostio_type_directory_use();
   
   //Speicher fuer ein neues typehandle allokieren
   typehandle_t* typehandle = malloc(sizeof(typehandle_t));
   
   //Die Typen-ID
   typehandle->id          = 255;
   
   //Die Pointer auf unsere Handles setzen. NULL wenn für
   //diejenigen Pointer wofür kein Handler zur Verfügung steht.
   typehandle->pre_open    = NULL;
   typehandle->post_open   = NULL;
   typehandle->read        = &floppy_read_handler;
   typehandle->write       = &floppy_write_handler;
   typehandle->seek        = &floppy_seek_handler;
   typehandle->close       = NULL;
   //Das Typehandle bei LostIO registrieren, damit es verfügbar ist.
   lostio_register_typehandle(typehandle);


   //Der Inhalt des Version-Ramfile
   const char* version = "Version 0.0.1";
   //Nun wird das Ramfile erstellt
   vfstree_create_node("/version", LOSTIO_TYPES_RAMFILE, strlen(version) + 1, (void*)version);
   //Zuerst wird das devices-Verzeichnis erstellt
   vfstree_create_node("/devices", LOSTIO_TYPES_DIRECTORY, 0, NULL);
   //Die beiden Nodes fuer die beiden Diskettenlaufwerke erstellt
   vfstree_create_node("/devices/fd0", 255, 1440 * 1024, (void*)0);
   vfstree_create_node("/devices/fd1", 255, 1440 * 1024, (void*)1);
   //Diese Schleife sorgt dafuer, dass der Treiber nicht sofort nach
   //dem Initialisieren wieder geschlossen wird.
   while(TRUE) yield();
   
   return 0;

} </c>