\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}
