codice:
la prossima volta riporta anche l'errore) se ti riferisci a questo:
Scusami hai ragione ^^
Il problema nasce nel come ho fatto la lettura, se scrivessi soltanto "ls" poi mi chiederebbe sempre di scriver input allora ho dovuto creare due return nella funzione DistinguiComando ( 2 se esiste solo una parola cioè il comando e quindi non chiama DistinguiParametri , e 1 se ci sono anche i parametri, 0 invece se non c'è neanche il comando ). Nella funzione execvp ( o anche execv ) devo comunque passargli un char* const char* oltre al const char* anche se devo passarli solo il comando. Ho capito quello che hai detto ma al livello implementativo dovrei fare così? ( sotto la parte del codice interessata )
codice:
int verifica = DistinguiComando(comando);
        if ( verifica == 2) {
             pid = fork();
             if ( pid == 0) {
                strcpy(parametri[*dimensione],comando);
		execvp (comando,parametri);
             }
          ......
ma quindi anche quando gli passo dei parametri ( es.: "ps -aux" ) la lista dei parametri deve essere formato da : 1) ps 2) -aux ... oppure solo da -aux? Se non è proprio così allora non ho capito xD


codice:
e infatti non lo trova. Non confondere i comandi di sistema con i comandi built-in della bash: "help" appartiene a questa seconda categoria (tant'è che se provi ad avviare quel comando da csh, per dirne una, ottieni "command not found"), pertanto la syscall exec* non potrà mai eseguirtelo (non direttamente, di sicuro).
è inutile complicare il codice in quel modo per ottenere il path del comando: provare i "path possibili" uno dietro l'altro è una soluzione brutta, inefficiente, non universale e assolutamente non scalabile (tra le altre cose, un path come /usr/lib/apt/solvers/ sarà presente solo su distro linux che usano APT come gestore di pacchetti, ma il mondo là fuori è molto più vasto).
Semplifica.
Anziché usare la funzione execv(), ricorri a execvp() che accetta come primo parametro il semplice nome dell'eseguibile (non il path completo), sobbarcandosi poi il compito di cercarlo in automatico in tutte le directory presenti nella variabile di ambiente PATH, svincolandoti quindi completamente dall'onere di dover comporre il percorso a mano.
man exec per maggiori informazioni su tutte le funzioni della famiglia exec*.
Questo ho capito e sei stato molto esaustivo infatti modificando con execvp mi funziona allo stesso modo e mi ha semplificato di gran lunga il codice .

Comunque sia ti ringrazio di tutto il tempo ^^