Appel d'un programme externe

Fermé
programmation - 3 mars 2016 à 12:13
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 4 mars 2016 à 16:54
Bonjour,


en programmation c , comment je fais appeler un programme externe et je l'utilise dans mon programme principal ?

2 réponses

Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
3 mars 2016 à 13:30
Bonjour,

hors de ton main: 

void ma_fonction(tes variables d'entrées){
ton code
}

Ton main :

ma_fonction(tes variables d'entrées);


Tu peux aussi mettre un return dans la fonction pour stocker le résultat dans une variable.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
3 mars 2016 à 13:34
Je pense qu'il veut dire "un programme exécutable externe"
0
Pierre1310 Messages postés 8554 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 645
3 mars 2016 à 13:35
Tu stocke le programme dans un fichier texte, tu l'ouvre et tu l’exécute.
0
programmation
3 mars 2016 à 13:58
non c'est un autre programme externe que mon programme c'est ne pas une fonction
0
programmation
4 mars 2016 à 10:34
je vais appeler un programme externe que je le programme pour l’insérer dans mon second programme est ce que cette écriture est juste ou non ?
x=system("nom de premier programme(les paramètres du second programme)");
tel que x est une sortie dans le second programme
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 3/03/2016 à 15:31
Bonjour

La fonction standard
system()
accessible par stdlib .h permet de faire cela :

http://www.cplusplus.com/reference/cstdlib/system/

Sous Windows, utiliser l'API Windows et la fonction
CreateProcess()
est recommandé pour mieux contrôler le lancement d'applications.

https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa?redirectedfrom=MSDN


Dal
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 mars 2016 à 14:59
Tu demandes :

est ce que cette écriture est juste ou non ?
x=system("nom de premier programme(les paramètres du second programme)");
tel que x est une sortie dans le second programme


La syntaxe de
system()
est définie dans la documentation dont je t'ai donné le lien.
system()
prend un seul paramètre, qui est une chaîne de caractères représentant une commande à lancer. Ta commande peut avoir des paramètres.

Ce qui est retourné ("x") est un entier, qui contient la valeur de retour du programme lancé, et non pas la sortie standard (stdout) du programme.

La valeur de retour est l'entier retourné par un programme en fin d'exécution.

Si ce que tu cherches à obtenir ce n'est pas cela, mais la sortie standard (stdout) du programme, c'est à dire ce qui devrait s'afficher dans la console, tu dois plutôt :

- utiliser
popen()
sous des systèmes POSIX, Windows en proposant un équivalent sous la forme de
_popen()
: https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/popen-wpopen?redirectedfrom=MSDN&view=msvc-160&viewFallbackFrom=vs-2019

- autrement, en utilisant l'API Windows et la fonction
CreateProcess()
avec
CreatePipe()
sous Windows, tu peux rediriger la sortie stdout du processus lancé. C'est plus complexe à faire, mais tu as un exemple là : https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output?redirectedfrom=MSDN

Ces deux pages contiennent des exemples de code.


Dal

P.S. : si tu veux me répondre écris à la suite de mon post, et non pas à la suite de celui de Pierre, car sinon on n'y comprend plus rien.
0
programmation > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
Modifié par programmation le 4/03/2016 à 15:29
je ne comprends pas , dans mon cas j'ai besoin d'avoir comme sortie X un tableau d'entier et n'est pas un chaîne donc dans ce cas est ce que j'utilise popen() au lieu de system ?
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 4/03/2016 à 16:57
Comme je te l'ai dit
system()
renvoie un entier. C'est tout.

Disons que ton programme que tu lances s'appelle A, s'il se termine par "return 0;" le programme B qui lance
int x = system(A);
va récupérer
0
dans
x
.

Si le programme A se termine avec une erreur et une instruction
exit(-1);
par exemple, le programme B qui lance
int x = system(A);
va récupérer
-1
dans
x
.

Un programme ne peut renvoyer un "tableau d'entiers" au sens où on l'entend en C.

Il peut renvoyer une suite d'entiers en les affichant successivement, par contre (à l'écran, sur la sortie standard).

popen()
ou
_popen()
vont permettre de récupérer la sortie standard, qui va effectivement se présenter comme une chaîne. Cela va permettre de récupérer ce qui est affiché par le programme (lorsque le programme A exécute des
printf()
par exemple).

Cette chaîne peut être, par exemple, une suite de nombres entiers séparée par des espaces, que tu vas pouvoir interpréter dans un autre programme B.

Un programme peut communiquer des données à un autre par d'autres moyens, y compris en créant un fichier de données lu par le second, en utilisant les signaux, des pipes, des sockets,.. mais comme on ne sait rien de ce que tu fais on ne peut pas te dire quelle conception serait la meilleure.

Autre chose, que tu n'as pas clarifié. Es-tu le programmeur des deux programmes A et B ?

Donne un exemple simple stp, indiquant quel programme fait quoi et en nommant tes programmes de façon à ce qu'on comprenne lequel produit quoi et lance quoi, comment et le résultat attendu.

Fait l'effort de répondre aux questions.


Dal
0