IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Problème avec la commande EXEC()


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Par défaut Problème avec la commande EXEC()
    Bonjour,

    Voici mon problème:

    Je dois développer sous un environnement linux, un programme PERE qui appelle un autre programme FILS. Ce que doit faire FILS est de retourner un nombre aléatoire situé entre 1 et 100. PERE de son côté lui doit recueillir ce nombre aléatoire et faire des traitements quelconque dessus.

    Ainsi je me trouve avec un fils.c qui lui retourne très bien le nombre aléatoire en question et un fichier pere.c qui lui essai d'aller chercher l'info de fils.c une fois compiler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -o fils.exe fils.c
    gcc -o pere.exe pere.c
    ainsi dans le code de pere.c dans le main j'ai écris une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int x = execl( "./", "fils.exe", NULL );
    mais lorsque je l'exécute il retourne toujours la valeur -1 comme quoi l'exécution du programme fils.exe a échoué. J'ai testé la commande exec() avec le fichier seulement mais je n'arrive toujours pas à comprendre comment aller chercher la valeur du nombre aléatoire que fils.exe retourne.

    Merci de l'entraide!

  2. #2
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Sans code source on risque pas de pouvoir beaucoup t'aider...

  3. #3
    Membre confirmé
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Par défaut
    verifie l'appel du processus fils!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Par défaut Code source
    Voici le code du FILS.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main() {
        srand( time( 0 ) );
        sleep(1);
        return ( rand() % 100 + 1 );
    }
    voici le code du PERE.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     int x = 0;
            int fils = fork();
            printf( "je cree un fils.\n" );
            if( fils == 0 ) {
                x = execlp( "fils.exe", NULL );
                printf( "resultat = %d", x );
                if( x == 7 ) {
                    // je déclare le fils gagnant et j'affiche son PID
                }else{
                    // je kill le processus et il n'y a pas de gagnant
                }
            }
    Donc si le resultat == 7 soit le nombre aléatoire retourné par fils.c alors à ce moment je peux continuer mon travail, mais dans tout mes essais, il me retourne toujours -1.

    Merci!

  5. #5
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    Extrait de man execlp :
    Citation Envoyé par man execlp
    Les fonctions execlp() et execvp() dupliqueront les actions de l’interpréteur de commandes dans la recherche du fichier exécutable si le nom fourni ne contient pas
    de barre oblique « / ». Le chemin de recherche est spécifié dans la variable d’environnement PATH. Si cette variable n’est pas définie, le chemin par défaut sera
    « /bin:/usr/bin: ». De plus, certaines erreurs sont traitées de manière spécifique.
    Donc, si tu ne spécifies pas le chemin complet vers ton programme, il va aller le chercher dans PATH ou dans /bin ou /usr/bin.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Par défaut Reply
    Si je comprends bien c'est que je ne spécifie pas correctement ou rechercher l'exécutable de mon autre programme (soit fils.exe).

    J'ai testé plusieurs variante toutes aussi inffructueuses les unes que les autres exemples:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = execlp( "./fils.exe", NULL );
    x = execlp( "/fils.exe", NULL );
    x = execlp( "fils.exe", NULL );
    donc selon moi si je spécifie ./ c'est bien pour désigner le répertoire courant dans lequel je me trouve?

    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la commande exec("convert
    Par amalec78 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 02/02/2011, 14h06
  2. Problème avec la commande exec et netstat
    Par Didier100 dans le forum Langage
    Réponses: 7
    Dernier message: 06/01/2011, 15h29
  3. [Système] Problème avec la fonction exec()
    Par ben_harper dans le forum Langage
    Réponses: 13
    Dernier message: 28/06/2006, 11h32
  4. Problème avec la commande revoke sous oracle
    Par merlubreizh dans le forum Oracle
    Réponses: 19
    Dernier message: 28/04/2006, 15h02
  5. [C++] Problème avec la commande "make"
    Par quantik-revolution dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 02/04/2006, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo