|
Seyshell
|
Implémentation des primitives de bas niveau et des commandes du Système de Gestion de Fichiers (SGF). More...
#include "disk.h"#include "env.h"#include "struct.h"#include <linux/limits.h>#include <stdio.h>#include <string.h>#include <unistd.h>
Functions | |
| int | init_inode_in_disk (disk *d, int inode_index, int filetype, unsigned short perms, int owned_bloc) |
| Initialise les métadonnées d'un inode spécifique directement sur le disque. | |
| int | find_free_bloc (disk *d) |
| Parcourt le vecteur d'allocation pour trouver et réserver le premier bloc libre détecté. | |
| int | find_offset_in_parent_bloc (bloc *parent_bloc) |
| Calcule la première position disponible (offset en octets) au sein d'un bloc parent de type répertoire. | |
| int | is_dir_empty (disk *d, int bloc_index) |
| Vérifie si un bloc de répertoire donné est vide. | |
| int | is_file_empty (disk *d, int bloc_index) |
| Scanne l'intégralité d'un bloc de fichier pour valider s'il ne comporte que des zéros. | |
| int | allocate_node (disk *disk, inode *parent, char *name, char type) |
| Alloue un nouvel inode et met à jour les liaisons structurelles dans le répertoire parent. | |
| int | remove_inode (disk *disk, inode *parent, inode *inode_to_remove, int inode_to_remove_idx) |
| Supprime physiquement un inode, libère ses ressources blocs et efface sa référence chez son parent. | |
| int | do_rmdir (disk *disk, char *filepath) |
Commande système rmdir. Supprime un répertoire vide identifié par son chemin absolu. | |
| int | do_rm (disk *disk, char *filepath) |
Commande système rm. Supprime un fichier classique ou un lien symbolique. | |
| int | create_file (disk *disk, inode *parent, char *filename) |
Précise la création d'un nœud d'index typé comme Fichier Régulier (TYPE_FILE). | |
| int | create_directory (disk *disk, inode *parent, char *dirname) |
Conçoit un sous-répertoire complet et initialise ses entrées auto-référentielles (. et ..). | |
| int | check_if_name_is_already_taken (char *name, int dir_index, disk *d) |
| Détermine si une chaîne textuelle de nommage est déjà enregistrée dans les entrées du répertoire ciblé. | |
| int | do_touch (disk *d, char *filepath) |
Commande système touch. Crée un nouveau fichier vide à l'emplacement indiqué. | |
| int | do_mkdir (disk *d, char *dirpath) |
Commande système mkdir. Génère une arborescence de sous-répertoire d'après un chemin fourni. | |
| void | write_in_file (disk *d, int file_index, char *data, char mode) |
| Injecte du contenu texte dans le premier bloc alloué d'un inode fichier selon deux modes d'écriture. | |
| int | get_number_of_free_blocs (disk *d) |
| Calcule le volume de stockage disponible en comptabilisant le nombre de blocs non possédés. | |
| int | get_number_of_inode_left (disk *d) |
| Mesure la quantité d'inodes résiduels disponibles au sein de la table d'inodes globale. | |
| int | do_df (disk *d) |
Commande système df. Affiche les statistiques d'utilisation de l'espace disque et des inodes. | |
| int | find_dir_inode_by_name (char *name, int dir_index, disk *d) |
| Parcourt les entrées d'un répertoire pour extraire l'ID numérique de l'inode correspondant à un nom donné. | |
| int | do_ls (disk *d, char *path) |
Commande système ls. Liste l'ensemble des éléments compris dans un répertoire. | |
| char * | read_in_file (disk *d, int file_index) |
| Extrait et copie l'intégralité du texte stocké dans le premier bloc de données d'un fichier. | |
| int | do_cat (disk *disk, char *path_to_file) |
Commande système cat. Affiche le contenu d'un fichier ou redirige l'entrée standard. | |
| int | redirect_out (disk *d, int mode, char *file, int in) |
| Redirige le flux de données lu depuis un descripteur d'entrée vers un fichier spécifié de notre SGF. | |
| disk | create_disk () |
| Formate et initialise un tout nouveau disque virtuel brut nommé "disk" sur le support hôte. | |
| disk | open_disk (char *filename) |
| Ouvre un fichier conteneur physique existant sur le système hôte pour charger sa structure logique en mémoire RAM. | |
| void | persist_on_disk (disk *d) |
| Synchronise (sauvegarde) l'arborescence logique en mémoire vive dans le conteneur physique "disk". | |
Implémentation des primitives de bas niveau et des commandes du Système de Gestion de Fichiers (SGF).
Alloue un nouvel inode et met à jour les liaisons structurelles dans le répertoire parent.
[Nom, ID Inode] dans le parent, et appel à l'initialisation.| disk | Pointeur vers le disque virtuel. |
| parent | Pointeur vers l'inode du répertoire parent devant accueillir la référence. |
| name | Nom textuel de la nouvelle entrée. |
| type | Type de fichier à créer (TYPE_FILE, TYPE_DIRECTORY). |
| int check_if_name_is_already_taken | ( | char * | name, |
| int | dir_index, | ||
| disk * | d | ||
| ) |
Détermine si une chaîne textuelle de nommage est déjà enregistrée dans les entrées du répertoire ciblé.
| name | Chaîne de caractères (Nom recherché). |
| dir_index | Identifiant numérique de l'inode de répertoire à examiner. |
| d | Pointeur vers le disque virtuel. |
Conçoit un sous-répertoire complet et initialise ses entrées auto-référentielles (. et ..).
| disk | Pointeur vers le disque virtuel. |
| parent | Pointeur vers l'inode du dossier parent. |
| dirname | Nom du nouveau dossier. |
| disk create_disk | ( | ) |
Formate et initialise un tout nouveau disque virtuel brut nommé "disk" sur le support hôte.
/, création automatique des liens auto-référencés . et .. sur le bloc 0, et génération d'un fichier de test.Précise la création d'un nœud d'index typé comme Fichier Régulier (TYPE_FILE).
| disk | Pointeur vers le disque virtuel. |
| parent | Pointeur vers l'inode du dossier parent. |
| filename | Nom du fichier à concevoir. |
| int do_cat | ( | disk * | disk, |
| char * | path_to_file | ||
| ) |
Commande système cat. Affiche le contenu d'un fichier ou redirige l'entrée standard.
| disk | Pointeur vers le disque virtuel. |
| path_to_file | Chemin vers le fichier à lire. Si NULL, la fonction affiche en boucle le flux de l'entrée standard. |
| int do_df | ( | disk * | d | ) |
Commande système df. Affiche les statistiques d'utilisation de l'espace disque et des inodes.
| d | Pointeur vers le disque virtuel. |
| int do_ls | ( | disk * | d, |
| char * | path | ||
| ) |
Commande système ls. Liste l'ensemble des éléments compris dans un répertoire.
| d | Pointeur vers le disque virtuel. |
| path | Optionnel : chemin vers le dossier à lister. Si NULL, utilise la variable d'environnement PWD. |
| int do_mkdir | ( | disk * | d, |
| char * | dirpath | ||
| ) |
Commande système mkdir. Génère une arborescence de sous-répertoire d'après un chemin fourni.
| d | Pointeur vers le disque virtuel. |
| dirpath | Chemin logique qualifiant le nouveau dossier. |
| int do_rm | ( | disk * | disk, |
| char * | filepath | ||
| ) |
Commande système rm. Supprime un fichier classique ou un lien symbolique.
| disk | Pointeur vers le disque virtuel. |
| filepath | Chemin vers le fichier cible à supprimer. |
| int do_rmdir | ( | disk * | disk, |
| char * | filepath | ||
| ) |
Commande système rmdir. Supprime un répertoire vide identifié par son chemin absolu.
| disk | Pointeur vers le disque virtuel. |
| filepath | Chemin absolu menant au répertoire à supprimer. |
| int do_touch | ( | disk * | d, |
| char * | filepath | ||
| ) |
Commande système touch. Crée un nouveau fichier vide à l'emplacement indiqué.
| d | Pointeur vers le disque virtuel. |
| filepath | Chemin complet d'accès au fichier à générer. |
| int find_dir_inode_by_name | ( | char * | name, |
| int | dir_index, | ||
| disk * | d | ||
| ) |
Parcourt les entrées d'un répertoire pour extraire l'ID numérique de l'inode correspondant à un nom donné.
| name | Nom de l'élément recherché au sein du dossier. |
| dir_index | Index du nœud d'index du répertoire de recherche. |
| d | Pointeur vers le disque virtuel. |
| int find_free_bloc | ( | disk * | d | ) |
Parcourt le vecteur d'allocation pour trouver et réserver le premier bloc libre détecté.
| d | Pointeur vers le disque virtuel. |
| int find_offset_in_parent_bloc | ( | bloc * | parent_bloc | ) |
Calcule la première position disponible (offset en octets) au sein d'un bloc parent de type répertoire.
(MAX_INODE_NAME + sizeof(int)). Une entrée est considérée libre si son premier caractère est '\0'.| parent_bloc | Pointeur vers le bloc de données du répertoire parent. |
| int get_number_of_free_blocs | ( | disk * | d | ) |
Calcule le volume de stockage disponible en comptabilisant le nombre de blocs non possédés.
| d | Pointeur vers le disque virtuel. |
| int get_number_of_inode_left | ( | disk * | d | ) |
Mesure la quantité d'inodes résiduels disponibles au sein de la table d'inodes globale.
| d | Pointeur vers le disque virtuel. |
| int init_inode_in_disk | ( | disk * | d, |
| int | inode_index, | ||
| int | filetype, | ||
| unsigned short | perms, | ||
| int | owned_bloc | ||
| ) |
Initialise les métadonnées d'un inode spécifique directement sur le disque.
| d | Pointeur vers la structure représentant le disque virtuel. |
| inode_index | Indice de la table d'inodes à initialiser. |
| filetype | Type à attribuer à l'inode (TYPE_FILE, TYPE_DIRECTORY, etc.). |
| perms | Permissions d'accès sous forme de masque binaire (ex: 0b111111111). |
| owned_bloc | Indice du premier bloc de données associé à cet inode. |
| int is_dir_empty | ( | disk * | d, |
| int | bloc_index | ||
| ) |
Vérifie si un bloc de répertoire donné est vide.
| d | Pointeur vers le disque virtuel. |
| bloc_index | Indice du bloc de données associé au répertoire à analyser. |
| int is_file_empty | ( | disk * | d, |
| int | bloc_index | ||
| ) |
Scanne l'intégralité d'un bloc de fichier pour valider s'il ne comporte que des zéros.
| d | Pointeur vers le disque virtuel. |
| bloc_index | Indice du bloc à analyser. |
| disk open_disk | ( | char * | filename | ) |
Ouvre un fichier conteneur physique existant sur le système hôte pour charger sa structure logique en mémoire RAM.
| filename | Chaîne de caractères qualifiant l'emplacement du fichier fichier-disque (généralement "disk"). |
| void persist_on_disk | ( | disk * | d | ) |
Synchronise (sauvegarde) l'arborescence logique en mémoire vive dans le conteneur physique "disk".
| d | Pointeur vers la structure mémoire globale à sérialiser sur le disque dur réel. |
| char * read_in_file | ( | disk * | d, |
| int | file_index | ||
| ) |
Extrait et copie l'intégralité du texte stocké dans le premier bloc de données d'un fichier.
malloc. C'est à la fonction appelante de libérer la ressource. | d | Pointeur vers le disque virtuel. |
| file_index | Identifiant numérique de l'inode de type fichier. |
| int redirect_out | ( | disk * | d, |
| int | mode, | ||
| char * | file, | ||
| int | in | ||
| ) |
Redirige le flux de données lu depuis un descripteur d'entrée vers un fichier spécifié de notre SGF.
mode. S'il n'existe pas, un fichier classique est automatiquement créé dans son répertoire d'appartenance.| d | Pointeur vers le disque virtuel. |
| mode | Mode d'ouverture : 0 pour écraser (>), 1 pour ajouter à la fin (>>). |
| file | Nom ou chemin du fichier cible devant intercepter le flux. |
| in | Descripteur d'écriture d'entrée (Pipe, stdin, etc.) depuis lequel lire les octets. |
Supprime physiquement un inode, libère ses ressources blocs et efface sa référence chez son parent.
| disk | Pointeur vers le disque virtuel. |
| parent | Pointeur vers l'inode du répertoire parent. |
| inode_to_remove | Pointeur vers l'inode devant être détruit. |
| inode_to_remove_idx | Index numérique de l'inode à détruire dans la table des inodes. |
| void write_in_file | ( | disk * | d, |
| int | file_index, | ||
| char * | data, | ||
| char | mode | ||
| ) |
Injecte du contenu texte dans le premier bloc alloué d'un inode fichier selon deux modes d'écriture.
| d | Pointeur vers le disque virtuel. |
| file_index | Index numérique de l'inode cible. |
| data | Pointeur vers le buffer de chaînes textuelles à enregistrer. |
| mode | Sélection de comportement : 0 pour écraser (>), toute autre valeur pour concaténer à la fin (>>). |