\chapter{compte\+\_\+rendu\+\_\+2}
\hypertarget{md_docs_2compte__rendus_2compte__rendu__2}{}\label{md_docs_2compte__rendus_2compte__rendu__2}\index{compte\_rendu\_2@{compte\_rendu\_2}}


 \hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md29}{}\doxysection{\texorpdfstring{Rapport de conception}{Rapport de conception}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md29}
\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md30}{}\doxysubsection{\texorpdfstring{Projet Système 2025/2026 – Système de Gestion de Fichiers (\+SGF)}{Projet Système 2025/2026 – Système de Gestion de Fichiers (SGF)}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md30}
{\bfseries{Membres de l’équipe \+:}}
\begin{DoxyItemize}
\item CHOISY Alexis
\item DEGAT Teddy
\item DA SILVA FERREIRA Lucas
\item FOURNIE Baptiste
\item FATIHI Youssef
\end{DoxyItemize}

{\bfseries{Encadrante \+:}} ABOUDA Dhekra ~\newline
 {\bfseries{Date de remise \+:}} 2 mai 2026\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md31}{}\doxysubsection{\texorpdfstring{Sommaire}{Sommaire}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md31}

\begin{DoxyItemize}
\item I. Introduction
\item II. Architecture et Modélisation
\item III. Algorithmes Principaux
\item IV. Conclusion
\end{DoxyItemize}\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md32}{}\doxysubsection{\texorpdfstring{I. Introduction}{I. Introduction}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md32}
Ce projet consiste à réaliser un SGF (Système de Gestion de Fichier) dans le cadre d\textquotesingle{}un projet.

Le cahier des charges impose la réalisation de ce SGF en se basant sur un système d\textquotesingle{}inode et de blocs stockés (ext3fs ou ext4fs) sur un volume afin de persister les données.

Ce rapport a pour but de montrer l\textquotesingle{}avancement du projet, notamment concernant la conception et l\textquotesingle{}explication du fonctionnement des primitives du SGF.\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md33}{}\doxysubsection{\texorpdfstring{II. Architecture et Modélisation}{II. Architecture et Modélisation}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md33}
Pour rappel, le projet est structuré de cette manière \+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structenv}{env}}\ \{}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{char}*\ \mbox{\hyperlink{structenv_a170118ec15be2b419562524b75693d9f}{key}};}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{char}*\ \mbox{\hyperlink{structenv_a4c45a37bbe3008aa248a28d0b60289b7}{value}};}
\DoxyCodeLine{\}\ \mbox{\hyperlink{structenv}{env}};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structinode}{inode}}\ \{}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{short}\ \mbox{\hyperlink{structinode_ab744b42f5d23ec542bd9897a4d15a5fa}{perms}};\ \textcolor{comment}{//\ rwxrwxrwx}}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{char}\ \mbox{\hyperlink{structinode_a2d0a5188e7dfbfcf2fa374a5fb348177}{filetype}};}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{int}\ \mbox{\hyperlink{structinode_aaeb4427c36772c74ae86c9510ee6a6b3}{blocs}}[\mbox{\hyperlink{const_8h_ad7140f3913ca85546efb2ded034d0af2}{MAX\_BLOCS}}];}
\DoxyCodeLine{\}\ \mbox{\hyperlink{structinode}{inode}};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structbloc}{bloc}}\ \{}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{char}\ \mbox{\hyperlink{structbloc_a801f2e871d2e285480d31426e39e01a9}{datas}}[\mbox{\hyperlink{const_8h_a60fedb7550ff4e00d6c70dd2d257c154}{MAX\_BYTES\_PER\_BLOC}}];}
\DoxyCodeLine{\}\ \mbox{\hyperlink{structbloc}{bloc}};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{typedef}\ \textcolor{keyword}{struct\ }\mbox{\hyperlink{structdisk}{disk}}\ \{}
\DoxyCodeLine{\ \ \textcolor{keywordtype}{char}\ \mbox{\hyperlink{structdisk_a60d62e18ebc1d2933bb952352397acda}{owned\_blocs}}[\mbox{\hyperlink{const_8h_ad7140f3913ca85546efb2ded034d0af2}{MAX\_BLOCS}}];\ \textcolor{comment}{//\ 1\ si\ possédé\ par\ un\ inode,\ 0\ si\ libre}}
\DoxyCodeLine{\ \ \mbox{\hyperlink{structinode}{inode}}\ \mbox{\hyperlink{structdisk_a187c55f0919fa8f44cc442857cce3e8d}{inodes}}[\mbox{\hyperlink{const_8h_af58c11b86af508a573976185fb99170f}{MAX\_INODE}}];}
\DoxyCodeLine{\ \ \mbox{\hyperlink{structbloc}{bloc}}\ \mbox{\hyperlink{structdisk_ad418fe421d1f081b29dcc7922608ca59}{blocs}}[\mbox{\hyperlink{const_8h_ad7140f3913ca85546efb2ded034d0af2}{MAX\_BLOCS}}];}
\DoxyCodeLine{\}\ \mbox{\hyperlink{structdisk}{disk}};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{//\ pour\ 10\ inode\ qui\ a\ 30\ blocs\ de\ chacun\ 1024\ octets,\ on\ a\ 30720\ octets,\ soit}}
\DoxyCodeLine{\textcolor{comment}{//\ 30,7\ Ko\ sur\ le\ disque}}

\end{DoxyCode}


Entre temps nous avons jugé important de rajouter 
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordtype}{char}\ owned\_blocs[\mbox{\hyperlink{const_8h_ad7140f3913ca85546efb2ded034d0af2}{MAX\_BLOCS}}]}

\end{DoxyCode}


pour certaines commandes afin de déterminer si un bloc est libre ou non (par exemple pour la commande {\ttfamily df}).

Nous avons aussi rajouté une structure {\ttfamily env} sous forme d\textquotesingle{}un dictionnaire mis à disposition pour le shell (par exemple la variable \textquotesingle{}PWD\textquotesingle{} qui sert pour parcourir l\textquotesingle{}arborescence). {\ttfamily env} utilise le design pattern singleton, c\textquotesingle{}est à dire qu\textquotesingle{}une seule instance de cet objet existe et est fréquentée ou modifiée quand cela est nécessaire.\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md34}{}\doxysubsection{\texorpdfstring{III. Algorithmes Principaux}{III. Algorithmes Principaux}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md34}
Ici sera expliqué le fonctionnement des primitives du SGF ainsi que certaines commandes du shell associé.\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md35}{}\doxysubsubsection{\texorpdfstring{$<$u$>$3.\+1. La primitive $<$tt$>$create\+\_\+file()$<$/tt$>$$<$/u$>$}{<u>3.1. La primitive <tt>create\_file()</tt></u>}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md35}
Avant d\textquotesingle{}expliquer le fonctionnement de la primitive, il est nécessaire d\textquotesingle{}expliquer comment fonctionne un fichier dans un système ext3fs  Il s\textquotesingle{}agit simplement d\textquotesingle{}un inode qui pointe sur un ou plusieur bloc de donnée (ici 128 octets). Ce bloc décrit le contenu du fichier. L\textquotesingle{}inode contient
\begin{DoxyItemize}
\item Si l\textquotesingle{}inode concerne un fichier, un répertoire ou un lien symbolique
\item les droits de l\textquotesingle{}inode concerné (droit de lecture/écriture/exécution)
\end{DoxyItemize}

La primitive fonctionne de la manière suivante \+:
\begin{DoxyItemize}
\item On trouve un bloc de donné libre
\item Une fois ce bloc trouvé, on trouve un espace libre de 32 octets (28 pour le nom du fichier et 4 pour la référence à l\textquotesingle{}index de l\textquotesingle{}inode concerné)
\end{DoxyItemize}\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md36}{}\doxysubsubsection{\texorpdfstring{$<$u$>$3.\+2. La primitive $<$tt$>$create\+\_\+directory()$<$/tt$>$$<$/u$>$}{<u>3.2. La primitive <tt>create\_directory()</tt></u>}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md36}
Premièrement il faut savoir comment se structure un dossier dans un système ext3fs 

La primitive fonctionne de la manière suivante \+:
\begin{DoxyItemize}
\item On trouve un bloc de donné libre
\item Une fois ce bloc trouvé, on trouve un espace libre de 32 octets (28 pour le nom du fichier et 4 pour la référence à l\textquotesingle{}index de l\textquotesingle{}inode concerné)
\item On créer un dossier \textquotesingle{}.\textquotesingle{} qui pointe sur l\textquotesingle{}inode du dossier en création
\item On créer un dossier \textquotesingle{}..\textquotesingle{} qui pointe sur le parent de l\textquotesingle{}inode en création
\end{DoxyItemize}

à noter qu\textquotesingle{}un dossier n\textquotesingle{}est qu\textquotesingle{}un fichier qui structure l\textquotesingle{}information d\textquotesingle{}une manière différente (en faisant stockant le nom et la référence vers les inodes de ses fils)\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md37}{}\doxysubsubsection{\texorpdfstring{$<$u$>$3.\+3. La primitive $<$tt$>$write\+\_\+in\+\_\+file()$<$/tt$>$$<$/u$>$}{<u>3.3. La primitive <tt>write\_in\_file()</tt></u>}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md37}
Il s\textquotesingle{}agit simplement d\textquotesingle{}écrire des données dans un bloc de données soit en écrasant les données par des nouvelles (mode \textquotesingle{}w\textquotesingle{}) soit en rajoutant les données à la suite de celles déjà existantes (mode \textquotesingle{}a\textquotesingle{}).\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md38}{}\doxysubsubsection{\texorpdfstring{$<$u$>$3.\+4. La commande $<$tt$>$cd$<$/tt$>$$<$/u$>$}{<u>3.4. La commande <tt>cd</tt></u>}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md38}
Contrairement aux autres commandes du projet, cd est une commande assez spéciale car elle est toujours implémentée par le shell lui même et non déjà existante dans le système. En bref, elle est propre à chaque shell (bash, zsh, fish...). Dans les faits ça ne change pas grand chose mais l\textquotesingle{}implémentation n\textquotesingle{}est pas dans le fichier {\ttfamily \doxylink{disk_8c}{disk.\+c}} mais {\ttfamily \doxylink{exec_8c}{exec.\+c}} qui s\textquotesingle{}occupe de tout l\textquotesingle{}aspect exécution de commande (et non implémentation à la base).

Le plus long est le parsing du chemin, le fait de séparer les noms des dossiers des \textquotesingle{}/\textquotesingle{}. Par exemple pour le chemin {\ttfamily /dir1/dir2/} on va devoir parcourir {\ttfamily dir1} puis {\ttfamily dir2}. Pour cela, il existe une fonction {\ttfamily \doxylink{disk_8c_a6f69e1d7bb5d136f816149887845e9c8}{find\+\_\+dir\+\_\+inode\+\_\+by\+\_\+name()}} qui comme son nom l\textquotesingle{}indique sert à retrouver un inode grâce à son nom et comme on le sait déjà, le nom d\textquotesingle{}un inode est stocké dans le/les blocs du parent.

En bref, on va commencer du tout début du/des blocs du parent jusqu\textquotesingle{}à trouver (ou non) le nom du dossier donnné en paramètre. Et comme les noms sont stockés de cette manière \+: 

Une fois l\textquotesingle{}inode associé au nom du dernier dossier dans le chemin trouvé. on change la variable d\textquotesingle{}environnement \textquotesingle{}PWD\textquotesingle{}.

~\newline
 ~\newline
\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md39}{}\doxysubsubsection{\texorpdfstring{$<$u$>$3.\+5. La commande $<$tt$>$ls$<$/tt$>$$<$/u$>$}{<u>3.5. La commande <tt>ls</tt></u>}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md39}
ls est très similaire à cd sur le fonctionnement à la seule différence que ls affiche le contenu du dossier avec l\textquotesingle{}inode associé.\hypertarget{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md40}{}\doxysubsection{\texorpdfstring{IV. Conclusion}{IV. Conclusion}}\label{md_docs_2compte__rendus_2compte__rendu__2_autotoc_md40}
En résumé, cette phase intermédiaire de conception nous a permis de poser des fondations solides et cohérentes pour notre Système de Gestion de Fichiers. L\textquotesingle{}architecture globale, basée sur le modèle des inodes et des blocs de données (façon ext3/ext4), est désormais clairement modélisée et structurée en mémoire.

Le développement des primitives fondamentales — comme la création et l\textquotesingle{}écriture de fichiers ou l\textquotesingle{}arborescence des dossiers — couplé aux premières commandes vitales du shell (cd, ls), prouve la viabilité de notre approche. L\textquotesingle{}ajout de structures d\textquotesingle{}optimisation comme owned\+\_\+blocs ou l\textquotesingle{}environnement global (env) montre également notre capacité à adapter le cahier des charges aux défis techniques rencontrés en cours de route.

Bien que le projet soit encore en phase de développement, cette étape de mi-\/parcours valide nos choix algorithmiques et architecturaux. Les bases sont désormais saines et opérationnelles pour entamer la suite de l\textquotesingle{}implémentation et aboutir à un système complet et persistant d\textquotesingle{}ici le rendu final. 