Ditemi dove sta l'errore... :master: :master: :master:
/*
File: microshell-0.c
Specifica: piccola shell che esegue un comando passato (con argomenti) dallo STDIN, ne restituisce codice di uscita e torna ad attendere un successivo comando
Data: 28-04-2004
Problema: Non considera gli argomenti passati. Inoltre bisogna "per forza" dare uno spazio dopo aver digitato il comando sullo standard input
*/
#include <sys/types.h>
#include "sysmacro.h"
#include "util.h"
#define TRUE 1
#define MAXCOMMANDLENGTH 100
int main (int argc, char * argv[])
{
int pid;
char * stringa = (char*) malloc(sizeof(char) * MAXCOMMANDLENGTH);/*Al massimo un comando di 100 caratteri*/
char**a;
int n;
int contaComando = 0;
int statoComando = 0;
while(TRUE)
{
contaComando++;
printf("PROMPT>");
fgets(stringa, MAXCOMMANDLENGTH, stdin);
a = split_arg(stringa, " ", &n);
if ((pid = fork()) == -1)
{
perror("Padre> errore nella fork");
exit(0);
}
if (pid == 0)
{/*FIGLIO*/
execvp(a[0], &a[1]);//<-- L'errore e' qua ?!?
perror("Figlio> errore nella exec");
/*Perror solo in caso d'errore*/
}
else
{/*PADRE*/
wait(&statoComando);
printf("Padre> eseguito comando n.: %d ; stato di uscita : %d\n", contaComando,statoComando);
}
}
return(0);/*Mai...*/
}
Questo e', invece, il codice dove si trova la funzione split_args(...);
/*
File: util.c
Specifica: funzioni di utilita'
*/
/* include per stat */
#include <sys/stat.h>
/* include per malloc e strlen */
#include <stdlib.h>
#include <string.h>
#include "util.h"
.....
.....
.....
@description -- split_arg ritorna il vettore dei token in una stringa separati da un qualsiasi carattere separatore
@param -- linea, la linea da cui estrarre i token
@param -- separatori, i caratteri separatori
(es ": ;", due punti, blank e puntevvirgola)
@param -- numerotoken (OUTPUT) contiene il numero dei token trovati
@return -- puntatore all'array di token (stesso formato di argv) */
char ** split_arg(char *linea, char *separatori, int *numerotoken)
{
int i = 0; /* numero token trovati */
char **argv; /* vettore dei token */
char *copialinea; /* copia della linea */
char **indirizzocopialinea = &copialinea; /* punta a copialinea */
/* copia la stringa argomento */
copialinea = malloc( strlen(linea) + 1 );
strcpy(copialinea, linea);
/* alloca la prima posizione vettore dei token */
argv = malloc(sizeof(char *));
while( (argv[i] = strsep(indirizzocopialinea, separatori)) != NULL ) {
/* ancora un token */
i++;
/* ridimensiona vettore dei token */
argv = realloc(argv, (i + 1) * sizeof(char *));
}
/* scrive il numero di token trovati */
*numerotoken = i;
/* libera lo spazio allocato */
free(copialinea);
return(argv);
}
THKS