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
[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
A voir également:
- Python lancer un programme externe
- Lancer un programme au demarrage - Guide
- Programme demarrage windows 10 - Guide
- Chkdsk disque dur externe - Guide
- Programme (x86) ✓ - Forum Windows
- Ce programme est écrit en python ✓ - Forum Python
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
3 mars 2016 à 13:30
Bonjour,
Tu peux aussi mettre un return dans la fonction pour stocker le résultat dans une variable.
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.
[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
Modifié par [Dal] le 3/03/2016 à 15:31
Bonjour
La fonction standard
http://www.cplusplus.com/reference/cstdlib/system/
Sous Windows, utiliser l'API Windows et la fonction
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa?redirectedfrom=MSDN
Dal
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
[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
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
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
- autrement, en utilisant l'API Windows et la fonction
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.
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.
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
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 ?
[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
Modifié par [Dal] le 4/03/2016 à 16:57
Comme je te l'ai dit
Disons que ton programme que tu lances s'appelle A, s'il se termine par "return 0;" le programme B qui lance
Si le programme A se termine avec une erreur et une instruction
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).
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
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
0dans
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
-1dans
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
3 mars 2016 à 13:34
3 mars 2016 à 13:35
3 mars 2016 à 13:58
4 mars 2016 à 10:34
x=system("nom de premier programme(les paramètres du second programme)");
tel que x est une sortie dans le second programme