projet-systeme-exploitation.../readcmd.h
2021-05-23 16:25:18 +02:00

42 lines
2.1 KiB
C
Executable file

#ifndef __READCMD_H
#define __READCMD_H
/* Lit une ligne de commande depuis l'entrée standard.
* Remarque :
* Dans le cas où suffisamment de mémoire ne peut être allouée pour le résultat,
* affiche un message d'erreur et appelle exit().
*/
struct cmdline *readcmd(void);
/* Structure retournée par readcmd()
* Remarques utiles :
* - readcmd() peut retourner null, dans le cas où le processus en attente sur readcmd reçoit un signal
* - en cas d'appels successifs,
* readcmd() réutilise la mémoire allouée à la structure cmdline qu'elle retourne
*/
struct cmdline
{
char *err; /* Si non null : message d'erreur à afficher.
* Dans ce cas, les autres champs sont nuls. */
char *in; /* Si non null : nom du fichier vers lequel l'entrée doit être redirigée. */
char *out; /* Si non null : nom du fichier vers lequel la sortie doit être redirigée. */
char *backgrounded; /* Si non null : commande en tâche de fond */
char ***seq; /* Une ligne de commande est une suite de commandes liées par des tubes
* Ainsi,
* - une commande est un tableau de chaînes de caractères (char **).
* Chaque élément de ce tableau est en effet une chaîne (char *)
* correspondant à un argument de la commande.
* Le dernier pointeur du tableau est suivi d'un pointeur null, qui
* marque la fin du tableau.
* - seq est un tableau de commandes (char ***), chaque commande de ce
* tableau correspondant à une commande élémentaire du pipeline.
* Le dernier élément (char **) du tableau est ici aussi suivi d'un pointeur null.
* - Dans le cas particulier où une ligne vide est saisie, le pointeur référencé par
* seq vaut directement NULL : puisque le tableau n'a aucun élément, le marqueur
* de fin de tableau se trouve référencé par seq, ce que l'on peut écrire
* (*seq == NULL)
* (ou (seq[0] == NULL), mais cela peut prêter à confusion, seq[0] n'existant pas)
*/
};
#endif