Esercitazione 8

Attenzione: Includere SEMPRE la gestione degli errori (usare le MACRO in sysmacro.h).

Esercizio 1. (minishell) Realizzare una shell rudimentale che legge un comando con eventuali parametri dallo standard input e ne invoca l'esecuzione utilizzando la execvp(). La shell deve terminare se viene digitato il comando 'exit' e deve fornire nel prompt il numero di comando che stiamo per eseguire e lo stato con cui è terminato il comando precedente Ad esempio :

$ minishell
Benvenuto in minishell!!
stato = 0, cmd = 1 $$$ llls pippo
Nella execvp: No such file or directory 
stato = 29, cmd = 2 $$$ ls pippo
ls: pippo: No such file or directory
stato = 1, cmd = 3 $$$ ls pippo.c
pippo.c
stato = 0, cmd = 4 $$$
La execvp() richiede come primo argomento il file eseguibile e come secondo argomento una
char** argv
con il formato usuale. Per suddividere la stringa digitata dall'utente e mettere gli argomenti nel formato richiesto si puo' utilizzare la funzione
char ** split_arg (char *line, char *separatore, int* argc)
che suddivide la stringa 'line' in parole usando il separatore indicato come secondo argomento. La funzione restituisce un puntatore ad un array di stringhe (secondo il tipico formato di argv) e il numero di parole trovate (in *argc). Ad esempio:
char ** argv;
int argc;
 ...
argv = split_arg (stringa," ", &argc);
dopo l'esecuzione di questa chiamata argv punta all'array di tutte le parole trovate in stringa e separate da blank (" "). split_arg si trova in util.c (includere util.h).