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** argvcon 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).