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

C Discussion :

Appel d'un programme extérieur et récupération de la sortie


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Appel d'un programme extérieur et récupération de la sortie
    Bonjour

    J'ai trouvé comment lancer un programme externe en C et récupérer la main après : la fonction système.
    Le programme que je lance renvoie une sortie sous forme de int. J'aimerai récupérer cette sortie. Je fais comment ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Le code retourne par le programme est retourne par system.

    Si c'est sous forme d'IO sur la sortie standard, popen().

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Le problème c'est que je ne récupère pas le code prévu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        num=system("./combien_SDL Lequel\\ enlever\\ \\? 1");
        printf("%d %hu %hd %lu %ld\n",num,num,num,num,num);
    À la fin du programme appelé je récupère autre chose...
    0 0 0 0 0

    À la fin de combien_SDL, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("%d",retour);
    	return retour;
    J'ai bien le bon nombre qui s'affiche. C'est à dire autre chose que le 0 que je récupère !

    Petite modif dans le retour ?? pourquoi ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       printf("%d\n",num>>8);
        printf("%hd\n",num>>8);
        printf("%ld\n",num>>8);
        printf("%u\n",num>>8);
        printf("%hu\n",num>>8);
        printf("%lu\n",num>>8);
    affiche ce que je souhaite...

    Je suis à la rue !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Si c'est sous forme d'IO sur la sortie standard, popen().

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je ne voudrais pas d'IO sur la sortie standard !
    Si c'est bien que que je crois, l'IO ce serait récupérer ce qu'a mis le printf.
    Ce printf n'est là que pour le débogage. Je souhaite récupérer la sortie du return.

    Et la sortie du return, ce n'est tout de même pas de I/O ? Si ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/wait.h>
     
    int main()
    {
        int res = system("exit 0");
        int res2 = system("exit 42");
        printf("%d, %d\n", WEXITSTATUS(res), WEXITSTATUS(res2));
        return 0;
    }
    man waitpid pour WEXITSTATUS, il faudrait aussi utiliser WIFEXITED pour faire un controle d'erreur plus fin des erreurs.

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Merci !

    Pour ce que je compte faire, c'est bon ! Mais un test me montre que je récupère le reste de mon retour par 256 ! Mon retour ne dépasse pas ce nombre
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/11/2012, 12h06
  2. Appel d'un programme extérieur sous Solaris
    Par Thordax dans le forum C++
    Réponses: 2
    Dernier message: 11/07/2006, 17h25
  3. Réponses: 4
    Dernier message: 01/05/2006, 14h37
  4. appelle de plusieurs programme
    Par vince2005 dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2006, 21h35
  5. DLL Visual C++ appelée dans un programme Visual Basic
    Par marseillais57 dans le forum MFC
    Réponses: 7
    Dernier message: 21/07/2005, 14h57

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