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

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>
Include dependency graph for parsing.c:

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é.
 

Detailed Description

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 ('|', '>', '>>').

Function Documentation

◆ open_seyshell()

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.

Parameters
diskPointeur vers le disque virtuel à attacher au Shell.

◆ read_line()

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.

Warning
La chaîne renvoyée est allouée dynamiquement. Il incombe à la fonction appelante de libérer la mémoire via free().
Returns
char* Un pointeur vers la chaîne de caractères lue (terminée par '\0'), ou provoque l'arrêt du programme en cas d'échec d'allocation.

◆ shell_loop()

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 :

  1. Affiche l'invite de commande (Prompt) formatée à l'aide des variables utilisateur et système.
  2. Bloque l'exécution dans l'attente d'une entrée utilisateur via read_line().
  3. Découpe syntaxiquement la chaîne obtenue via split_line().
  4. Transmet le résultat au moteur d'exécution execute_cmd().
  5. Libère proprement les structures temporaires avant le tour suivant.
Parameters
diskPointeur vers le disque virtuel sur lequel opèrent les commandes.

◆ signal_handler()

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.

Parameters
sigNuméro du signal reçu (attendu : SIGINT).

◆ split_line()

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 :

  1. Un découpage lexical premier basé sur l'espace (" ") via strtok pour isoler les mots.
  2. Un découpage syntaxique (parsing) qui regroupe les arguments dans des structures 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.
Parameters
lineLa chaîne de caractères brute saisie dans le terminal.
Returns
command** Un tableau de pointeurs vers des structures command (le tableau est terminé par un pointeur NULL). Retourne NULL si la ligne est vide.