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 :

Interaction avec un autre programme


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut Interaction avec un autre programme
    Bonjour a tous, bonjour a toutes,

    Je developpe actuellement une application qui va devoir faire appel a un programme deja existant (un programme en Fortran). N'ayant jamais ete confronte a cette situation, j'aimerais que vous puissiez m'aiguiller quelque peu.

    Concretement, je dois faire appel au programme Fortran en lui passant des parametres depuis mon programme C++. Le programme Fortran s'execute et cree un fichier que je dois ensuite traiter dans mon programme C++. La creation du fichier n'etant pas instantane (quelques minutes), je ne sais trop comment m'y prendre.

    Si vous avez une piste sur laquelle me lancer, je suis preneur.

    Merci bien.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut préciser ton système d'exploitation.

    Sous Windows par exemple tu as CreateProcess pour lancer ton application, et tu peux attendre qu'il se termine avec une autre fonction dont je ne me rappelle plus. Le tout doit traîner dans la FAQ VC++.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    ton programme fortran est-il sous forme d'un executable (unprogramme.exe) ? Si oui, il faut voir du côté de ShellExecute() (linux) ou system() (windows).

    Pour lire le fichier généré, tu peux, par exemple, créer un thread dans ton programme c++ qui vérifie toutes les x millisecondes si le fichier existe. Lorsque ce fichier est créé, il peut le lire. Cette solution comporte 2 contraintes:
    1) connaitre le nom du fichier
    2) écrire un fichier temporaire pour créer le fichier puis le renommer une fois que la création est terminée, afin d'éviter qu'il soit lu avant qu'il n'est été fini d'être créé.

    Hope it helps.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Laurent Gomila
    Il faut préciser ton système d'exploitation.
    J'utilise un systeme UNIX.

    Citation Envoyé par Laurent Gomila
    Le tout doit traîner dans la FAQ VC++.
    http://c.developpez.com/faq/cpp/?pag...#DIVERS_system
    En effet, je potasse mais je risque de revenir

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Si tu utilises linux , la reponse est dans la conjonction des appels :

    fork + execlvp (pour la fonction exec , il s agit en fait d une famille de fonction qui different en fonction des parametres qu elles prennent en entree)


    Note:

    De memoire, pour attendre la fin d un process windows, il faut faire

    WaitForSingleObject(...)

    sous linux, tu vas avoir un code type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      pid_t p = fork();
     
      if (p > 0){
     
        waitpid(p); /* attendre la fin du processus fils */
     
      } else if (p == 0){
     
        execlvp(...); /* le processus courant DEVIENT l executable que tu lances */
      }


    note : sous windows , la fonction CreateProcess cree reellement un nouveau processus. Sous linux , le processus courant se transforme ... c est pour cela que l on utilise fork

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par smashy
    Si tu utilises linux , la reponse est dans la conjonction des appels :

    fork + execlvp (pour la fonction exec , il s agit en fait d une famille de fonction qui different en fonction des parametres qu elles prennent en entree)


    Note:

    De memoire, pour attendre la fin d un process windows, il faut faire

    WaitForSingleObject(...)

    sous linux, tu vas avoir un code type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      pid_t p = fork();
     
      if (p > 0){
     
        waitpid(p); /* attendre la fin du processus fils */
     
      } else if (p == 0){
     
        execlvp(...); /* le processus courant DEVIENT l executable que tu lances */
      }


    note : sous windows , la fonction CreateProcess cree reellement un nouveau processus. Sous linux , le processus courant se transforme ... c est pour cela que l on utilise fork
    Ca me semble etre ce qu'il faut faire. Merci bien.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/06/2014, 14h34
  2. interaction avec d'autres programmes
    Par Invité dans le forum C++
    Réponses: 12
    Dernier message: 29/07/2011, 19h26
  3. Ouvrir les fichiers png avec un autre programme
    Par fabou3377 dans le forum NetBeans
    Réponses: 1
    Dernier message: 18/01/2010, 14h04
  4. Interactions avec d'autres tables de la Bdd
    Par Antho13 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 15/06/2007, 21h59
  5. Comment afficher une valeur dans un edittext avec un autre programme
    Par pitizone dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 14/05/2007, 07h45

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