Non cambia nulla in quel modo, stai dichiarando un array di 100 puntatori a carattere e poi inizializzi staticamente il primo di essi scrivendo
Puoi ricorrere all'allocazione dinamica
codice:
printf("E' nato un figlio...\n");
printf("SONO UN FIGLIO ED ESEGUO IL COMANDO : %s\n", argv[now]);
char *path;
char *a[] = { argv[now], (char *) 0 };
path = (char *) malloc(5 + strlen(argv[now]) + 1);
strncpy(path, "/bin/", 5);
printf("STRINGA PARTENZA: %s\n", path);
strncat(path, *a, strlen(*a));
printf("STRINGA OTTENUTA : %s\n", path);
printf("STRINGA OTTENUTA : %s\n", path);
if(execv(path, a ) == -1) {
printf("Error Occured on execv; Quitting...\n");
return(-4);
}
return(1);
includendo ovviamente l'header file stdlib.h. Ho introdotto le versioni "safe" di strcpy() e strcat().
Comunque il return(1) dopo la execv() è inutile: se la funzione viene eseguita con successo, l'immagine del processo corrente in memoria viene sostituita con un'altra per eseguire il comando "path", e tutte le eventuali istruzioni successive ovviamente non saranno eseguite in quanto il text segment sarà completamente sostituito.