Bonjour,
Ma question est simple, j'aimerais lancer un executable depuis un code écrit en c avec visual c++ puis recupérer la valeur de retour de mon executable.
Malheureusement ke ne sais pas faire
Quelqu'un pourait il m'aider
Merci
Version imprimable
Bonjour,
Ma question est simple, j'aimerais lancer un executable depuis un code écrit en c avec visual c++ puis recupérer la valeur de retour de mon executable.
Malheureusement ke ne sais pas faire
Quelqu'un pourait il m'aider
Merci
system()Citation:
Envoyé par semenzato
http://man.developpez.com/
Je n'arrive pas a trouver la commande system() dans la msdn, est ce que tu pourrais m'aider?
il me semble que system permet d'executer un processus mais pas de recupérer le code de retour de l'executable
Parce que j'ai utilisé la commande createprocess mais la plateforme d'execution est du windows 3.11 donc ca ne fonctionne pas....
A+
Voilà ce que dit la norme :Citation:
Envoyé par semenzato
Il faut donc trouver le comportement de system() sur Windows 3.11. Ca pas être simple... Il n'a pas une doc ton compilateur pour Windows ?Citation:
Envoyé par n1124
Ca a été chaud, mais j'ai trouvé ça :
http://msdn2.microsoft.com/en-us/lib...4t(VS.80).aspx
Mais attention, ça ne concerne pas Windows 3.11 qui n'est plus supporté. Tu as besoin d'utiliser un vieux tromblon comme ça ?
C'est une commande spécifique à l'OS
Il faut prendre CreateProcess
system bien que standard ne semble pas exister dans le MSDNCode:
1
2 CreateProcess(NULL, "C:\\Program Files\\MyApp", ...)
Mais si, mais il faut savoir chercher hé hé !Citation:
Envoyé par Mat.M
Archive ça :
http://msdn2.microsoft.com/en-us/lib...w6(VS.80).aspx
J'espère que c'est pas du lien 'jetable', avec M$, il faut s'attendre à tout...
Je te remercie mais le lien que tu viens de me donner ne fonctionne pas..
Dans la msdn, la fonction createprocess() n'est pas défini pour un os windows 3.11 alors est ce qu'il y a une petite chance qu'il existe?
Je m'en doutais, ça sent le lien dynamique, on est suivi à la trace...Citation:
Envoyé par semenzato
http://forum-images.hardware.fr/imag.../casterman.gif
Voilà le chemin dans MSDN :
MSDN Library > Development Tools and Languages > Visual Studio 2005 > Visual Studio > Visual C++ > Reference > Libraries Reference > Run-Time Library
Et un extrait pour ceux qui ne veulent pas chercher :Citation:
Envoyé par Emmanuel Delahaye
Citation:
Run-Time Library Reference
system
Execute a command.
ParametersCode:
1
2
3 int system( const char *command );
command
Command to be executed.
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.
See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, return codes.
Remarks
The system function passes command to the command interpreter, which executes the string as an operating-system command. system refers to the COMSPEC and PATH environment variables that locate the command-interpreter file (the file named CMD.EXE in Windows NT and later). If command is NULL, the function simply checks to see whether the command interpreter exists.
You must explicitly flush (using fflush or _flushall) or close any stream before calling system.
Requirements
Required header : <process.h> or <stdlib.h>
Compatibility : ANSI, Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003
Je pense utiliser cette commande system mais dans ce cas comment obtenir le code de retour de l'executable?
8O 8O 8OCitation:
Envoyé par semenzato
Ca ne me parait pas d'une difficulté insurmontable ?Code:int ret = system("ma_commande");
Attention tout de meme, la valeur de retour n'est pas utilisable directement, et la facon de recuperer cette valeur depend du systeme (avec system(), ce n'est pas tres surprenant).Citation:
Envoyé par Emmanuel Delahaye
Un exemple sous Linux et Unix:
On va appeler le programme suivant (compile et appele called):
depuis ce programme:Code:
1
2
3
4
5 int main(void) { return 147; }
La sortie est:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main(void) { int ret = system("called"); printf("Coded: %d\n", ret); if (WIFEXITED(ret) != 0) { printf("Decoded : %d\n", WEXITSTATUS(ret)); } else { printf("Command called by system() failed.\n"); } return 0; }
On voit qu'imprimer directement ret ne donne pas la bonne reponse. Il faut utiliser la macro WEXITSTATUS associee a wait() pour "decoder" la valeur (en fait, le "decodage" est simplement un decalage de 8 bits vers la gauche). WIFEXITED() determine si la commande a termine avec succes ou non. J'ignore si l'API Windows utilise un mecanisme similaire.Code:
1
2
3 Coded: 37632 Decoded : 147
Non, l'API Windows donne directement le code de retour.
D'ailleurs, j'ignorais que sous les unixoïdes, system() retournait un statut (comme wait()) au lieu d'un code de retour...
Bonjour,
pour recuperer le code de retour sous linux:
apres la fin de l'execution du programme, il suffit de taper sur le terminal:
echo $status ou echo $?
mais sous windows je sais pas
--
Tox
Sympa, mais on parle de la façon de le faire depuis un programme en C, pas en ligne de commande ou en shell...Citation:
Envoyé par toxycyty
Heureusement qu'il y a des gens trop gentils pour en faire une règle : Tiens, en Batch, il y a la variable %ERRORLEVEL% qui contient le code de retour...