|
Seyshell
|
Gestion de l'interface utilisateur (CLI), du parsing syntaxique de la ligne de commande et de la boucle principale du Shell. More...
#include "parsing.h"#include "disk.h"#include "exec.h"#include "struct.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>
Functions | |
| char * | read_line () |
| Récupère une ligne de texte saisie par l'utilisateur sur l'entrée standard (stdin). | |
| command ** | split_line (char *line) |
| Analyse une ligne de texte brute et la transforme en un tableau de structures de commandes. | |
| void | shell_loop (disk *disk) |
| Boucle d'exécution infinie (REPL) régissant le cycle de vie du Shell. | |
| void | signal_handler (int sig) |
| Intercepteur (Handler) de signal pour dérouter l'action par défaut du signal d'interruption SIGINT. | |
| void | open_seyshell (disk *disk) |
| Initialise le contexte opérationnel complet et démarre le Shell intégré. | |
Gestion de l'interface utilisateur (CLI), du parsing syntaxique de la ligne de commande et de la boucle principale du Shell.
Ce fichier implémente l'analyseur lexical (tokenizer) et syntaxique basique capable de découper une ligne de texte en commandes interconnectées par des opérateurs de contrôle ('|', '>', '>>').
| void open_seyshell | ( | disk * | disk | ) |
Initialise le contexte opérationnel complet et démarre le Shell intégré.
Configure la table des signaux pour immuniser le processus père contre les interruptions de terminal (SIGINT), instancie le dictionnaire global des variables d'environnement, puis bascule dans la boucle d'écoute.
| disk | Pointeur vers le disque virtuel à attacher au Shell. |
| char * read_line | ( | ) |
Récupère une ligne de texte saisie par l'utilisateur sur l'entrée standard (stdin).
Lit les caractères un par un jusqu'à rencontrer un retour à la ligne ('
') ou la fin de fichier (EOF). Alloue dynamiquement un tampon mémoire (buffer) et l'agrandit par blocs successifs via realloc si la taille de la saisie dépasse le volume initial BUFSIZE.
free().| void shell_loop | ( | disk * | disk | ) |
Boucle d'exécution infinie (REPL) régissant le cycle de vie du Shell.
Cette fonction orchestre en continu les étapes suivantes :
read_line().split_line().execute_cmd().| disk | Pointeur vers le disque virtuel sur lequel opèrent les commandes. |
| void signal_handler | ( | int | sig | ) |
Intercepteur (Handler) de signal pour dérouter l'action par défaut du signal d'interruption SIGINT.
Empêche le processus parent du Shell de se terminer brutalement lors de la combinaison de touches Ctrl+C. À la place, il effectue un retour à la ligne et réaffiche un prompt propre pour restituer le contrôle à l'utilisateur.
| sig | Numéro du signal reçu (attendu : SIGINT). |
| command ** split_line | ( | char * | line | ) |
Analyse une ligne de texte brute et la transforme en un tableau de structures de commandes.
Le traitement s'effectue en deux phases principales :
strtok pour isoler les mots.command. Les caractères spéciaux comme le tube (|) créent une nouvelle structure de commande, tandis que les opérateurs de redirection (> et >>) configurent les champs redirect_out et append_mode de la commande courante.| line | La chaîne de caractères brute saisie dans le terminal. |
command (le tableau est terminé par un pointeur NULL). Retourne NULL si la ligne est vide.