Beim Initialisieren des Blockdevices werden zuerst S-Block, D-Map, FAT und die Namen aus dem Rootverzeichnis ausgelesen und somit im Arbeitspeicher abgelegt. S-Block, D-Map und das FAT werden immer beim Aufruf der Funktion fuseRelease auf das Blockdevice zurück geschrieben mit den aktualisierten Daten. Das Root-Verzeichnis wird immer direkt auf dem Blockdevice aktualsiert, sobald an diesem eine Änderung vorgenommen wird. Durch die unten aufgeführten Hilfsfunktionen konnten wir unseren Code mehrfach verwenden.
Methode | Zweck |
---|---|
fuseInit() | initialisiert das Blockdevice und öffnet die Containerdatei |
fuseRelease() | schließt eine zuvor geöffnete Datei |
fuseReaddir() | gibt Informationen über den Verzeichnisinhalt zurück |
fuseGetattr() | liefert Informationen über eine Datei zurück |
fuseOpen() | öffnet eine Datei um sie zu lesen |
fuseRead() | liest von einer Datei |
fuseMknod() | erzeugt eine neue Datei |
fuseWrite() | schreibt in eine Datei |
fuseUnlink() | löscht eine Datei |
Parameter
- const char *path: Pfad der Datei, von welcher die Position angefragt wird.
Durch diese Funktion kann die Position der angefragten Datei im Root-Verzeichnis lokalisiert werden. Dies wird dadurch erreicht, dass alle Einträge des Root-Verzeichnisses an der Position des Datei Namens vergliechen wird, mit dem angefragten Pfad/Datei.
Parameter
- u_int32_t blockNo: Nummer des angeforderten Blocks.
- char *buf: Char Array, in welches der angeforderte Block geschrieben wird.
- size_t size: Die Menge an Bytes, die aus dem Block gelesen werden sollen.
- off_t offset: Der Offset, ab dem die Daten ausgelesen werden sollen im angeforderten Block.
Diese Funktion liest den angeforderten Block aus dem Blockdevice aus und speichert diesen in dem übergebenen char Array ab.
Parameter
- char *firstBuf: Char Array, welches in einen zweites Array übertragen werden soll.
- size_t size: Die Größe des firstBuf.
- off_t firstOff: Der Offset, ab wo die Daten übernommen werden sollen.
- char* secondBuf: Das zweite char Array, in welches das erste char Array übertragen wird.
- off_t secondOff: Der Offset, ab wo die neuen Daten geschrieben werden sollen im zweiten Array.
Schreibt den erstem Buffer (firstBuf) in den zweiten Buffer (secondBuf). Es besteht jeweils die Möglichkeit ein Offset anzugeben.
Parameter
- int position: Position im Root-Verzeichnis
Liest aus dem Root-Block die Größe der angefragten Datei aus.
Parameter
- const char *path: Pfad einer Datei
Überprüft, Ob eine Datei beireits existiert. Dies wird durch Aufrufen der getFilePosition() Funktion erreicht, da diese, wenn sie eine Datei nicht findet -1 zurück gibt.
Parameter
- const char *path: Pfad einer Datei
Entfernt den Dateipfad vom Dateinamen.
Parameter
- const char* path: Pfad einer Datei
Überprüft, ob der Dateiname korrekt ist.
Parameter
- const char *path: Pfad einer Datei
Überprüft ob der übergebene Dateipfad korrekt ist.
Parameter
- const char *path: Pfad einer Datei
Überprüft ob der Pfad ein korrekter Verzeichnispfad ist und keine Datei.
Parameter
- char* chars: Char Array, in welchem eine Zahl codiert ist.
- int numberOfChars: Größe des char Arrays.
Konvertiert eine in ein Char abgespeicherte Zahl zurück in einen Integer.
Parameter
- int number: Die Zahl die konvertiert werden soll
- char* buffer: Ein char Array, in welches die konvertierte Zahl gespeichert werden soll.
- int numberOfChars: Anzahl der chars bzw. die Größe in Byte, des char Buffers.
Konvertiert einen Integer in einen Char. Die Zahl wird dabei in das Dualsystem konvertiert.
Liest die DMap aus dem Blockdevice aus.
Schreibt die im Speicher(Memory) liegende DMap auf das Blockdevice.
Parameter
- u_int32_t position: Start Block einer Datei.
Die Blöcke einer Dateien werden in der DMap und im FAT freigegeben.
Parameter
- size_t size: Menge der Byte die angefordert werden.
- u_int32_t blockAdressBuffer: Array in welches die Nummern der freien Blöcken gespeichert werden.
Sucht nach freien Blöcken und gibt die Nummern dieser zurück.
Parameter
- int filePosition: Position des Root-Blocks einer Datei im Root-Verzeichnis.
- u_int32_t* list: Liste der angefragten Blöcken
- char* buf: char Array, in welches die ausgelesen Daten gespeichert werden
- size_t size: Anzahl der Bytes die in das char Array geschrieben werden sollen.
- off_t offset: Position ab der von dem Blockdevice gelesen werden soll.
Liest die Blöcke, die in der übergebenen Liste angegeben sind aus dem Blockdevice aus. Dabei wird davor überprüft, ob einer dieser Blöcke schon gecacht wurde. Ausserdem wird am Ende des Lesevorgangs der zuletzt ausgelesene Block gecached.
Parameter
- u_int32_t startblock: Erster Block der gelesen werden soll.
- char* buffer: char Array, in welches die ausgelesen Daten gespeichert werden.
- size_t size: Anzahl der Bytes die in das char Array geschrieben werden sollen.
- off_t offset: Position ab der von dem Blockdevice gelesen werden soll.
Berechnet sich die zu lesende Blöcke aus und fordert diese über die Funktion readSectionByList an.
Parameter
- u_int32_t startblock: Erster Block der geschrieben werden soll.
- char* buffer: char Array, welches auf das Blockdevice geschrieben werden soll.
- size_t size: Anzahl der Bytes die aus dem char Array auf das Blockdevice geschrieben werden sollen.
- off_t offset: Ab dieser Position werden die Daten geschrieben auf dem Blockdevice.
Die Funktion berechnet, wie viele Blöcke geschrieben werden müssen und übergibt diese an writeSectionByList.
Parameter
- u_int32_t* list: Blöcke, die beschrieben werden sollen.
- char* buffer: char Array, welches auf das Blockdevice geschrieben werden soll.
- size_t size: Anzahl der Bytes die aus dem char Array auf das Blockdevice geschrieben werden sollen.
- off_t offset: Ab dieser Position werden die Daten geschrieben auf dem Blockdevice.
Schreibt den übergebenen Buffer auf das Blockdevice.
Schreibt das FAT aus dem Speicher(Memory) auf das Blockdevice.
Liest das FAT aus dem Blockdevice aus.
Schreibt den S-Block auf das Blockdevice.
Liest den S-Block aus dem Blockdevice aus.
Liest die Filenamen aus dem Root-Verzeichnis, das auf dem Blockdevice liegt aus.
Parameter
- size_t size: Größe in Bytes.
Berechnet die benötigte Anzahl an Böcken, um die übergebene Größe an Daten zu speichern.
Parameter
- int filePosition: Position des Root-Blocks im Root-Verzeichnis.
Liest den Startblock des Files aus dem Root-Block aus.
Parameter
- char* buffer: Char Array Pointer.
- size_t size: Größe des char Arrays.
Befüllt den übergebenen Buffer mit '\0'.
Parameter
- u_int32_t startposition: Nummer des Startblocks.
- size_t oldFileSize: Alte Größe der Datei in Bytes.
- size_t newFileSize: Neue Größe der Datei in Bytes.
Erzeugt ein FAT Eintrag.
Parameter
- u_int32_t* list: unisgned int32 Array, in welches die Nummbern der Blöcke geschrieben werden.
- u_int32_t startposition: Nummer des Start-Blocks.
- int numberOfBlocks: Anzhal der Blöcke. Bei -1 werden alle Blöcke, der Datei ausgelesen.
- int startnumber: Offset = Anfang der Datenblöcke.
Schreibt die Nummern der Blöcke, in denen die Datei gespeichert ist in das u_int32 Array.
Paramter
- u_int32_t position: Position des Root-Blocks.
- char* buf: Buffer in welchem der aktualisierte Root-Block steht.
Schreibt in den Root-Block.
Parameter
- const char *path: Pfad der Datei, die angelegt wird.
- mode_t mode: Berechtigungen der Datei.
Legt eine neue Datei an und erstellt den Root-Block für diese Datei.