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 de programme


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut Appel de programme
    Bonjour à tous ,

    j'ai une toute petite question à vous poser et je pense que vous n'aurez aucune difficulté à me répondre . J'ai cherché sur le net mais je trouve beaucoup de ligne de commande linux alors que moi je cherche une instruction C++ lol.

    Quelle genre d'instruction C++ doit-on utiliser pour lancer un exécutable sous linux ? Je m'explique. J'ai créé quelques petits jeux sur linux en C++ avec la SDL (sous code blocks). Je les ai compilé en release et ça fonctionne. Cependant, j'aimerais créer un programme qui lance l'un de ces petits jeux de manières assez aléatoire.
    Donc il me faudrait un exemple d'une instruction C++ qui lance un programme .

    Merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Regarde du coté de l'appel system().

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par Sunsawe Voir le message
    Regarde du coté de l'appel system().
    Salut, merci pour ta réponse .
    Pour ceux qui cherchent voici un exemple de code. Il faut remplacer "dir" par l'instruction system voulu .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main ()
    {
      int i;
      printf ("Checking if processor is available...");
      if (system(NULL)) puts ("Ok");
        else exit (1);
      printf ("Executing command DIR...\n");
      i=system ("dir");
      printf ("The value returned was: %d.\n",i);
      return 0;
    }

  4. #4
    Membre actif Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Points : 281
    Points
    281
    Par défaut
    Pour construire un peu sur le sujet, je me suis toujours demandé comment faire une frontend pour un programme en ligne de commande. Notamment comment récupérer l'output d'un programme pour le traiter et, par exemple, l'afficher sous forme graphique.
    Je pense qu'on peut utiliser system() avec un > derrière pour dumper l'output vers un fichier, qu'on peut ensuite utiliser. Est-ce portable ? Est-ce la manière canonique de faire ? Ou est il possible de faire mieux ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Rewpparo Voir le message
    Pour construire un peu sur le sujet, je me suis toujours demandé comment faire une frontend pour un programme en ligne de commande. Notamment comment récupérer l'output d'un programme pour le traiter et, par exemple, l'afficher sous forme graphique.
    Je pense qu'il faut creuser du côté des flux (que je connais très mal). Il doit y avoir moyen rediriger cout vers un fichier.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Citation Envoyé par Rewpparo Voir le message
    Pour construire un peu sur le sujet, je me suis toujours demandé comment faire une frontend pour un programme en ligne de commande. Notamment comment récupérer l'output d'un programme pour le traiter et, par exemple, l'afficher sous forme graphique.
    Je pense qu'on peut utiliser system() avec un > derrière pour dumper l'output vers un fichier, qu'on peut ensuite utiliser. Est-ce portable ? Est-ce la manière canonique de faire ? Ou est il possible de faire mieux ?
    Sous Qt il existe QProcess qui permet d'écouter les sorties standards d'un process. J'imagine que Boost.Interprocess fournit le même genre de service...

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Merci pour vos réponse supplémentaires

    J'ai tout de même une petite question supplémentaire et toujours en lien avec le sujet. Le code que j'ai affiché dans mon post précédent. Vous penser que ce qui est retourné dans "i" équivaut à quoi ? Je me demande s'il est possible de récupérer une valeur retournée par l'un des programme que j'appel :/. Vous avez une petite idée ?

    Merci d'avance

  8. #8
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Dans i, si je ne me trompe pas, tu récupères un entier qui correspond au "status" de fin de l'application appelée.

    En fait, c'est la valeur retournée par le "main" de l'application. En général, 0 si tout s'est bien passé.

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par Sunsawe Voir le message
    Dans i, si je ne me trompe pas, tu récupères un entier qui correspond au "status" de fin de l'application appelée.

    En fait, c'est la valeur retournée par le "main" de l'application. En général, 0 si tout s'est bien passé.
    Je ne suis pas sûr parce que j'ai tester en faisant "return 10000" dans mon main et il me retourne quand même 0 :/. Vous aussi ou c'est moi qui me goure ?

  10. #10
    Membre actif Avatar de Rewpparo
    Homme Profil pro
    Amateur
    Inscrit en
    Décembre 2005
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 170
    Points : 281
    Points
    281
    Par défaut
    The behavior and return value are platform-dependent.
    (source)
    Donc ca dépend du système sur lequel tu te trouves.
    Pour MSVC :
    Return Value

    If command is NULL and the command interpreter is found, returns a nonzero value. If the command interpreter is not found, returns 0 and sets errno to ENOENT. If command is not NULL, system returns the value that is returned by the command interpreter. It returns the value 0 only if the command interpreter returns the value 0. A return value of – 1 indicates an error, and errno is set to one of the following values:

    E2BIG
    Argument list (which is system dependent) is too big.
    ENOENT
    Command interpreter cannot be found.
    ENOEXEC
    Command-interpreter file has invalid format and is not executable.
    ENOMEM
    Not enough memory is available to execute command; or available memory has been corrupted; or invalid block exists, indicating that process making call was not allocated properly.
    (source)
    Si je comprend bien, ca renvoie 0 si le programme a bien été lancé, et -1 s'il y a eu un problème.

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par Rewpparo Voir le message
    (source)
    Donc ca dépend du système sur lequel tu te trouves.
    Pour MSVC :

    (source)
    Si je comprend bien, ca renvoie 0 si le programme a bien été lancé, et -1 s'il y a eu un problème.
    Ah ok merci beaucoup

    Une idée pour récupérer la valeur renvoyée ? (à part en l'écrivant dans un fichier texte)
    Merci d'avance

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

Discussions similaires

  1. Appel sous programme
    Par sam.fet dans le forum Linux
    Réponses: 2
    Dernier message: 17/08/2006, 12h20
  2. Appel de programme
    Par miron dans le forum C
    Réponses: 14
    Dernier message: 17/05/2006, 23h13
  3. Appeler un programme sur le poste client avec <object>
    Par ouioui2000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/08/2005, 14h40
  4. [Kylix] pb d'appel de programme externe
    Par wizwiz dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2004, 09h29
  5. [langage] appel de programmes exterieurs
    Par martijan dans le forum Langage
    Réponses: 34
    Dernier message: 07/07/2003, 10h40

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