Seyshell
Loading...
Searching...
No Matches
Functions
exec.c File Reference

Moteur d'exécution des commandes et gestionnaire de l'architecture des redirections (Pipes/Redirections). More...

#include "exec.h"
#include "disk.h"
#include "struct.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
Include dependency graph for exec.c:

Functions

int do_cd (disk *d, char *path)
 Commande système cd (Change Directory). Modifie le répertoire de travail courant du shell.
 
int do_echo (char **args)
 Commande système echo. Écrit les arguments sur la sortie standard avec résolution des variables d'environnement.
 
int exec_cmd_job (disk *d, char **args)
 Aiguilleur interne (Dispatch) associant le libellé textuel d'une commande à sa fonction C dédiée.
 
int spawn_proc (disk *d, int in, int out, command *cmd)
 Crée un processus enfant isolé pour exécuter une commande isolée et configure ses redirections de flux.
 
int execute_cmd (disk *d, command **args)
 Point d'entrée principal pour l'orchestration, le pipelining et l'exécution d'une ligne de commande.
 

Detailed Description

Moteur d'exécution des commandes et gestionnaire de l'architecture des redirections (Pipes/Redirections).

Ce fichier prend en charge le traitement des entrées utilisateur du shell intégré. Il gère l'expansion des variables d'environnement, l'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).

Function Documentation

◆ do_cd()

int do_cd ( disk d,
char *  path 
)

Commande système cd (Change Directory). Modifie le répertoire de travail courant du shell.

Parcourt l'arborescence logique du disque virtuel pour valider l'existence et le type du chemin demandé avant de mettre à jour la variable d'environnement "PWD".

Note
Cette commande est une fonction intégrée (builtin) qui s'exécute impérativement dans le processus parent du shell pour impacter durablement son environnement.
Parameters
dPointeur vers la structure représentant le disque virtuel.
pathChaîne de caractères spécifiant le chemin cible (relatif ou absolu).
Returns
int 1 en cas de succès, -1 si le chemin intermédiaire n'existe pas ou n'est pas un répertoire.

◆ do_echo()

int do_echo ( char **  args)

Commande système echo. Écrit les arguments sur la sortie standard avec résolution des variables d'environnement.

Analyse chaque mot reçu. Si un caractère '$' suivi d'un identifiant alphanumérique ou d'un underscore est détecté, la fonction effectue une expansion dynamique en remplaçant l'identifiant par sa valeur correspondante issue du gestionnaire d'environnement (get_env_value).

Parameters
argsTableau de chaînes de caractères représentant les arguments à afficher (se terminant par NULL).
Returns
int 1 après affichage réussi.

◆ exec_cmd_job()

int exec_cmd_job ( disk d,
char **  args 
)

Aiguilleur interne (Dispatch) associant le libellé textuel d'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 (persist_on_disk) est déclenchée.

Parameters
dPointeur vers le disque virtuel.
argsTableau de chaînes contenant la commande à l'indice 0 et ses paramètres à la suite.
Returns
int 1 si l'exécution s'est déroulée normalement, 0 si la commande demandée est inconnue.

◆ execute_cmd()

int execute_cmd ( disk d,
command **  args 
)

Point d'entrée principal pour l'orchestration, le pipelining et l'exécution d'une ligne de commande.

Gère de bout en bout le cycle de vie d'une instruction du Shell :

  1. Intercepte en priorité la commande intégrée cd.
  2. Gère la déconnexion de l'utilisateur (Ctrl+D).
  3. Organise l'enchaînement séquentiel de n-commandes via des tubes anonymes (pipe).
  4. Configure l'interception finale si une redirection de flux sortant vers un fichier (> ou >>) est détectée.
  5. Bloque le parent jusqu'à la fin de l'exécution de l'intégralité des sous-processus créés.
Parameters
dPointeur vers le disque virtuel.
argsTableau de pointeurs vers des structures command à exécuter en chaîne (Pipeline). Terminée par NULL.
Returns
int Statut de sortie final obtenu via waitpid().

◆ spawn_proc()

int spawn_proc ( disk d,
int  in,
int  out,
command cmd 
)

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 fork(). Dans le processus enfant, elle redirige l'entrée standard et la sortie standard vers les descripteurs passés en paramètres en utilisant dup2(), restaure les signaux par défaut, puis invoque exec_cmd_job().

Parameters
dPointeur vers la structure du disque virtuel.
inDescripteur de fichier devant remplacer l'entrée standard STDIN_FILENO (0 si aucune redirection).
outDescripteur de fichier devant remplacer la sortie standard STDOUT_FILENO (1 si aucune redirection).
cmdPointeur vers la structure de commande modélisant l'appel utilisateur.
Returns
int Le PID du processus fils généré pour le processus parent, ou 0 pour l'enfant.