Appel d'un programme externe

programmation -  
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour,


en programmation c , comment je fais appeler un programme externe et je l'utilise dans mon programme principal ?
A voir également:

2 réponses

Pierre1310 Messages postés 8854 Statut Membre 652
 
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 6373 Statut Contributeur 1 106
 
Je pense qu'il veut dire "un programme exécutable externe"
0
Pierre1310 Messages postés 8854 Statut Membre 652
 
Tu stocke le programme dans un fichier texte, tu l'ouvre et tu l’exécute.
0
programmation
 
non c'est un autre programme externe que mon programme c'est ne pas une fonction
0
programmation
 
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 6373 Statut Contributeur 1 106
 
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 6373 Statut Contributeur 1 106
 
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 6373 Statut Contributeur
 
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 6373 Statut Contributeur 1 106
 
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