|
Seyshell
|
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>
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. | |
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).
| 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".
| d | Pointeur vers la structure représentant le disque virtuel. |
| path | Chaîne de caractères spécifiant le chemin cible (relatif ou absolu). |
| 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).
| args | Tableau de chaînes de caractères représentant les arguments à afficher (se terminant par NULL). |
| 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.
| d | Pointeur vers le disque virtuel. |
| args | Tableau de chaînes contenant la commande à l'indice 0 et ses paramètres à la suite. |
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 :
cd.pipe).> ou >>) est détectée.| d | Pointeur vers le disque virtuel. |
| args | Tableau de pointeurs vers des structures command à exécuter en chaîne (Pipeline). Terminée par NULL. |
waitpid(). 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().
| d | Pointeur vers la structure du disque virtuel. |
| in | Descripteur de fichier devant remplacer l'entrée standard STDIN_FILENO (0 si aucune redirection). |
| out | Descripteur de fichier devant remplacer la sortie standard STDOUT_FILENO (1 si aucune redirection). |
| cmd | Pointeur vers la structure de commande modélisant l'appel utilisateur. |