\doxysection{src/exec.c File Reference} \hypertarget{exec_8c}{}\label{exec_8c}\index{src/exec.c@{src/exec.c}} Moteur d\textquotesingle{}exécution des commandes et gestionnaire de l\textquotesingle{}architecture des redirections (Pipes/\+Redirections). {\ttfamily \#include "{}exec.\+h"{}}\newline {\ttfamily \#include "{}disk.\+h"{}}\newline {\ttfamily \#include "{}struct.\+h"{}}\newline {\ttfamily \#include $<$stdio.\+h$>$}\newline {\ttfamily \#include $<$string.\+h$>$}\newline {\ttfamily \#include $<$unistd.\+h$>$}\newline Include dependency graph for exec.\+c\+: % FIG 0 \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item int \mbox{\hyperlink{exec_8c_a4614f3f18dbc47fed5b8d5a7d85a5a7a}{do\+\_\+cd}} (\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}d, char \texorpdfstring{$\ast$}{*}path) \begin{DoxyCompactList}\small\item\em Commande système {\ttfamily cd} (Change Directory). Modifie le répertoire de travail courant du shell. \end{DoxyCompactList}\item int \mbox{\hyperlink{exec_8c_a4bc13052fbac7fb151c273fe7e692224}{do\+\_\+echo}} (char \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}args) \begin{DoxyCompactList}\small\item\em Commande système {\ttfamily echo}. Écrit les arguments sur la sortie standard avec résolution des variables d\textquotesingle{}environnement. \end{DoxyCompactList}\item int \mbox{\hyperlink{exec_8c_afaef82623e4217aeb6b804b0e3b7f312}{exec\+\_\+cmd\+\_\+job}} (\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}d, char \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}args) \begin{DoxyCompactList}\small\item\em Aiguilleur interne (Dispatch) associant le libellé textuel d\textquotesingle{}une commande à sa fonction C dédiée. \end{DoxyCompactList}\item int \mbox{\hyperlink{exec_8c_a35f8b7b9c54f10f298d00d58225920db}{spawn\+\_\+proc}} (\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}d, int in, int out, \mbox{\hyperlink{structcommand}{command}} \texorpdfstring{$\ast$}{*}cmd) \begin{DoxyCompactList}\small\item\em Crée un processus enfant isolé pour exécuter une commande isolée et configure ses redirections de flux. \end{DoxyCompactList}\item int \mbox{\hyperlink{exec_8c_a82beace5b13f7e2d89dae34187bb7f46}{execute\+\_\+cmd}} (\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}d, \mbox{\hyperlink{structcommand}{command}} \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}args) \begin{DoxyCompactList}\small\item\em Point d\textquotesingle{}entrée principal pour l\textquotesingle{}orchestration, le pipelining et l\textquotesingle{}exécution d\textquotesingle{}une ligne de commande. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsection{Detailed Description} Moteur d\textquotesingle{}exécution des commandes et gestionnaire de l\textquotesingle{}architecture des redirections (Pipes/\+Redirections). Ce fichier prend en charge le traitement des entrées utilisateur du shell intégré. Il gère l\textquotesingle{}expansion des variables d\textquotesingle{}environnement, l\textquotesingle{}isolation des commandes via des processus séparés (fork), le routage des flux de données (inter-\/processus via des descripteurs de fichiers) et le support des builtins (cd). \doxysubsection{Function Documentation} \Hypertarget{exec_8c_a4614f3f18dbc47fed5b8d5a7d85a5a7a}\label{exec_8c_a4614f3f18dbc47fed5b8d5a7d85a5a7a} \index{exec.c@{exec.c}!do\_cd@{do\_cd}} \index{do\_cd@{do\_cd}!exec.c@{exec.c}} \doxysubsubsection{\texorpdfstring{do\_cd()}{do\_cd()}} {\footnotesize\ttfamily int do\+\_\+cd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}}]{d, }\item[{char \texorpdfstring{$\ast$}{*}}]{path }\end{DoxyParamCaption})} Commande système {\ttfamily cd} (Change Directory). Modifie le répertoire de travail courant du shell. Parcourt l\textquotesingle{}arborescence logique du disque virtuel pour valider l\textquotesingle{}existence et le type du chemin demandé avant de mettre à jour la variable d\textquotesingle{}environnement "{}\+PWD"{}. \begin{DoxyNote}{Note} Cette commande est une fonction intégrée (builtin) qui s\textquotesingle{}exécute impérativement dans le processus parent du shell pour impacter durablement son environnement. \end{DoxyNote} \begin{DoxyParams}{Parameters} {\em d} & Pointeur vers la structure représentant le disque virtuel. \\ \hline {\em path} & Chaîne de caractères spécifiant le chemin cible (relatif ou absolu). \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} int 1 en cas de succès, -\/1 si le chemin intermédiaire n\textquotesingle{}existe pas ou n\textquotesingle{}est pas un répertoire. \end{DoxyReturn} \Hypertarget{exec_8c_a4bc13052fbac7fb151c273fe7e692224}\label{exec_8c_a4bc13052fbac7fb151c273fe7e692224} \index{exec.c@{exec.c}!do\_echo@{do\_echo}} \index{do\_echo@{do\_echo}!exec.c@{exec.c}} \doxysubsubsection{\texorpdfstring{do\_echo()}{do\_echo()}} {\footnotesize\ttfamily int do\+\_\+echo (\begin{DoxyParamCaption}\item[{char \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}}]{args }\end{DoxyParamCaption})} Commande système {\ttfamily echo}. Écrit les arguments sur la sortie standard avec résolution des variables d\textquotesingle{}environnement. Analyse chaque mot reçu. Si un caractère \textquotesingle{}\$\textquotesingle{} suivi d\textquotesingle{}un identifiant alphanumérique ou d\textquotesingle{}un underscore est détecté, la fonction effectue une expansion dynamique en remplaçant l\textquotesingle{}identifiant par sa valeur correspondante issue du gestionnaire d\textquotesingle{}environnement ({\ttfamily get\+\_\+env\+\_\+value}). \begin{DoxyParams}{Parameters} {\em args} & Tableau de chaînes de caractères représentant les arguments à afficher (se terminant par NULL). \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} int 1 après affichage réussi. \end{DoxyReturn} \Hypertarget{exec_8c_afaef82623e4217aeb6b804b0e3b7f312}\label{exec_8c_afaef82623e4217aeb6b804b0e3b7f312} \index{exec.c@{exec.c}!exec\_cmd\_job@{exec\_cmd\_job}} \index{exec\_cmd\_job@{exec\_cmd\_job}!exec.c@{exec.c}} \doxysubsubsection{\texorpdfstring{exec\_cmd\_job()}{exec\_cmd\_job()}} {\footnotesize\ttfamily int exec\+\_\+cmd\+\_\+job (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}}]{d, }\item[{char \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}}]{args }\end{DoxyParamCaption})} Aiguilleur interne (Dispatch) associant le libellé textuel d\textquotesingle{}une commande à sa fonction C dédiée. Intercepte les commandes du SGF (ls, mkdir, touch, df, rm, rmdir, cat, echo). Pour les opérations altérant la structure du système de fichiers, une synchronisation disque immédiate ({\ttfamily persist\+\_\+on\+\_\+disk}) est déclenchée. \begin{DoxyParams}{Parameters} {\em d} & Pointeur vers le disque virtuel. \\ \hline {\em args} & Tableau de chaînes contenant la commande à l\textquotesingle{}indice 0 et ses paramètres à la suite. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} int 1 si l\textquotesingle{}exécution s\textquotesingle{}est déroulée normalement, 0 si la commande demandée est inconnue. \end{DoxyReturn} \Hypertarget{exec_8c_a82beace5b13f7e2d89dae34187bb7f46}\label{exec_8c_a82beace5b13f7e2d89dae34187bb7f46} \index{exec.c@{exec.c}!execute\_cmd@{execute\_cmd}} \index{execute\_cmd@{execute\_cmd}!exec.c@{exec.c}} \doxysubsubsection{\texorpdfstring{execute\_cmd()}{execute\_cmd()}} {\footnotesize\ttfamily int execute\+\_\+cmd (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}}]{d, }\item[{\mbox{\hyperlink{structcommand}{command}} \texorpdfstring{$\ast$}{*}\texorpdfstring{$\ast$}{*}}]{args }\end{DoxyParamCaption})} Point d\textquotesingle{}entrée principal pour l\textquotesingle{}orchestration, le pipelining et l\textquotesingle{}exécution d\textquotesingle{}une ligne de commande. Gère de bout en bout le cycle de vie d\textquotesingle{}une instruction du Shell \+: \begin{DoxyEnumerate} \item Intercepte en priorité la commande intégrée {\ttfamily cd}. \item Gère la déconnexion de l\textquotesingle{}utilisateur (Ctrl+D). \item Organise l\textquotesingle{}enchaînement séquentiel de n-\/commandes via des tubes anonymes ({\ttfamily pipe}). \item Configure l\textquotesingle{}interception finale si une redirection de flux sortant vers un fichier ({\ttfamily \texorpdfstring{$>$}{>}} ou {\ttfamily \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>}}) est détectée. \item Bloque le parent jusqu\textquotesingle{}à la fin de l\textquotesingle{}exécution de l\textquotesingle{}intégralité des sous-\/processus créés. \end{DoxyEnumerate} \begin{DoxyParams}{Parameters} {\em d} & Pointeur vers le disque virtuel. \\ \hline {\em args} & Tableau de pointeurs vers des structures {\ttfamily command} à exécuter en chaîne (Pipeline). Terminée par NULL. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} int Statut de sortie final obtenu via {\ttfamily waitpid()}. \end{DoxyReturn} \Hypertarget{exec_8c_a35f8b7b9c54f10f298d00d58225920db}\label{exec_8c_a35f8b7b9c54f10f298d00d58225920db} \index{exec.c@{exec.c}!spawn\_proc@{spawn\_proc}} \index{spawn\_proc@{spawn\_proc}!exec.c@{exec.c}} \doxysubsubsection{\texorpdfstring{spawn\_proc()}{spawn\_proc()}} {\footnotesize\ttfamily int spawn\+\_\+proc (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{structdisk}{disk}} \texorpdfstring{$\ast$}{*}}]{d, }\item[{int}]{in, }\item[{int}]{out, }\item[{\mbox{\hyperlink{structcommand}{command}} \texorpdfstring{$\ast$}{*}}]{cmd }\end{DoxyParamCaption})} Crée un processus enfant isolé pour exécuter une commande isolée et configure ses redirections de flux. Cette fonction effectue un appel système {\ttfamily fork()}. Dans le processus enfant, elle redirige l\textquotesingle{}entrée standard et la sortie standard vers les descripteurs passés en paramètres en utilisant {\ttfamily dup2()}, restaure les signaux par défaut, puis invoque {\ttfamily \doxylink{exec_8c_afaef82623e4217aeb6b804b0e3b7f312}{exec\+\_\+cmd\+\_\+job()}}. \begin{DoxyParams}{Parameters} {\em d} & Pointeur vers la structure du disque virtuel. \\ \hline {\em in} & Descripteur de fichier devant remplacer l\textquotesingle{}entrée standard STDIN\+\_\+\+FILENO (0 si aucune redirection). \\ \hline {\em out} & Descripteur de fichier devant remplacer la sortie standard STDOUT\+\_\+\+FILENO (1 si aucune redirection). \\ \hline {\em cmd} & Pointeur vers la structure de commande modélisant l\textquotesingle{}appel utilisateur. \\ \hline \end{DoxyParams} \begin{DoxyReturn}{Returns} int Le PID du processus fils généré pour le processus parent, ou 0 pour l\textquotesingle{}enfant. \end{DoxyReturn}