Bon je vous explique j'ai un travail de mi-session à remettre pour mercredi et j'ai essayer bien comme mal a faire fonctionner la commande execvp ... mais je crois que elle et moi on ne va pas ensemble puisqu'elle m'envoi toujours l'erreur errno = 10 ce qui signifie un problème de création du fils mais pourtant quand je passe à "la mitaine" ce qui veut dire que je met directement sans passer par des variables dans

char *parametre[20] = {"ps","-H",NULL};

execvp("ps",parametre);

*bien sur disposer dans les places approprier dans mon programmes ...
ceci marche !

mais quand je le remplace par le programme ci-dessous sa ne marche pas
je ne serait pas comment vous remercier si vous pouvez m'aider car hier jai tourner en rond de 12h a 24h et j'en suis rendu au meme point quand ce moment


#include <iostream.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <stdlib.h>
#include <wait.h>
#include <string.h>

void ctrlC ( int signal );

main ( int argc , char *argv [ ] )
{
int vrpf = 1;
int statut = -1;
int retourExecl = 0;
char commande [21];
char argument[21];
char *parametre[] = {commande, argument, NULL};
bool quitter = false;
int a = 0;
int b = 0;
int c = 0;

system ( "clear" );
cout << "Bienvenue dans le Marshell!" << endl;

while ( strcmp ( commande , "exit" ) != 0 )
{
wait (&statut);
statut /= 256;
// signal ( SIGINT , ctrlC );
strcpy ( commande , "" );
cout << "\nMarshell>";
cin.getline(commande, 21);
retourExecl = 0;

for( a = 0 ; commande[a] != ' ' ; a++);

a++;

for( b = 0 ; commande[a] != '\0' ; a++,b++)
{
*(parametre[1] + b) = commande[a];
cout << *(parametre[1] + b) << endl;
// argument[b] = commande[a];
}
commande[(a-b)] = '\0';
*(parametre[1] + b) = '\0';
*(parametre[0] + (a-b)) = '\0';
//strcpy( commande, commande );
//strcpy( argument, "-H" );
cout << *(parametre[0] + 2) << endl;
//char *parametre[] = {commande, argument, NULL};

cout << commande[2] << endl;
cout << *(parametre[1] + 2) << endl;
// cout << argument << endl;

if ( (vrpf = fork ( ) ) == 0 )
retourExecl = execvp ( commande , parametre );
else if ( vrpf < 0 )
cout << "Erreur de création du fils." << endl;
if ( vrpf > 0 || retourExecl == -1)
{
wait (&statut);
cout << "exit : " << statut << endl;
cout << "PID : " << getpid() << endl;
}
if ( retourExecl == -1 )
{
cout << "errno: " << errno << endl;
}
}
}