begin process at 2012 05 29 11:50:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

fork et execvp


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fork et execvp

lundi 8 octobre 2007 à 01:30:21 | fork et execvp

fullpirates

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;
      }
   }
}


Julien Cousineau
lundi 8 octobre 2007 à 02:01:34 | Re : fork et execvp

fullpirates

Ah ! et en passsant quand je sort le execvp() du fils pour voir son erreur elle me donne l'erreur 2 qui no such file or directory mais pourtant quand j'affiche mes variables elle sont identiques à ce qui devrait être écrit dans ces variables puisque quand j'écrit directement dans execvp() se qui est dans mes variables sa marches ...

Merci encore !

Julien Cousineau
lundi 8 octobre 2007 à 18:52:00 | Re : fork et execvp

The_Guardian

Bonjour,

y'a un problème avec la façon dont tu alloues ta variable parametre, donc commence avec une commande vide c'est mieux
char ** parametre;
 ensuite tu dois allouer parametre comme un tableau de char *
 donc la tu fais :
parametre = (char **)malloc(20*sizeof(char *));
pour allouer 20 arguments a ta commande (incluant la commande elle-meme et le NULL, bref pas 20 mais 18)
 ensuite tu fais
parametre[0] = "ps";
parametre[1] = "-aux";
parametre[2] = NULL;
ensuite je te conseille d'utiliser strcpy plutot que ta copie parce que ca complique la lecture et au final ça fait strcpy
Voila essaye ça et dis moi si ça marche

====


Une autruche ne se cuit pas aux petits lardons


Cette discussion est classée dans : int, commande, parametre, include, cout


Répondre à ce message

Sujets en rapport avec ce message

Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l une fiche de renseignement [ par cabarrus ] je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m Les nombres aléatoires en C++ (Visual C++ 6.0) [ par Yabo ] Tout d'abord voilà le code :CODE #include #include #include #include using namespace std;void animstartscreen() { int n Passer un algo iteratif en recursif [ par Peavy57 ] Selon vous est ce possible de mettre cela en recursif ? Code: #include #include #include #include void sequencesSerie4(int seq[],int seqSize, int erreur incomprise ... [ par tontonjab ] bonjour ... j'ai un probleme avec mon code source, et j'aimerais bien que vous y jetié un coup d'oeil pour m'aider !////////////////////#include #incl Pb perte initialisation variable C++ [ par smagf ] Bonjour, alors voici mon pb :   pDecrypter = new Computer(duplicates) un nouvel objet de type Computer est créé Computer::Computer(bool dupes): Decryp problème de OutPut [ par NAVIE ] Bonjour, J'écris ce message pour demander de l'aide au sujet des gestions des Input et des Output. En effet, dans un programme que j'ai fabriqué, je m probleme de retour de valeur [ par darmoor ] Salut! Bon je veut faire un petit prog en mode console qui fait les statistique d'un lancement de dé. J'ai commencé le debut: #include #include # Fin de recv [ par Ziman ] Bonjour,je fais actuellement une chtite application. J'aimerai juste qu'un client se connecte sur un serveur et qu'il puisse lui envoyer des messages. Recuperer un parametre de la ligne de commande [ par Loonis ] Bonjour à tous,Supposons une application a.out avec 2 parametres, le 1er étant une chaine de caractère le 2eme un entier.int main(int argc, char* argv


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales