Bonjour
J'ai trouvé comment lancer un programme externe en C et récupérer la main après : la fonction système.
Le programme que je lance renvoie une sortie sous forme de int. J'aimerai récupérer cette sortie. Je fais comment ?
Bonjour
J'ai trouvé comment lancer un programme externe en C et récupérer la main après : la fonction système.
Le programme que je lance renvoie une sortie sous forme de int. J'aimerai récupérer cette sortie. Je fais comment ?
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Le code retourne par le programme est retourne par system.
Si c'est sous forme d'IO sur la sortie standard, popen().
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Le problème c'est que je ne récupère pas le code prévu...
À la fin du programme appelé je récupère autre chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 num=system("./combien_SDL Lequel\\ enlever\\ \\? 1"); printf("%d %hu %hd %lu %ld\n",num,num,num,num,num);
0 0 0 0 0
À la fin de combien_SDL, j'ai :J'ai bien le bon nombre qui s'affiche. C'est à dire autre chose que le 0 que je récupère !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 printf("%d",retour); return retour;
Petite modif dans le retour ?? pourquoi ??
affiche ce que je souhaite...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 printf("%d\n",num>>8); printf("%hd\n",num>>8); printf("%ld\n",num>>8); printf("%u\n",num>>8); printf("%hu\n",num>>8); printf("%lu\n",num>>8);
Je suis à la rue !
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Je ne voudrais pas d'IO sur la sortie standard !
Si c'est bien que que je crois, l'IO ce serait récupérer ce qu'a mis le printf.
Ce printf n'est là que pour le débogage. Je souhaite récupérer la sortie du return.
Et la sortie du return, ce n'est tout de même pas de I/O ? Si ?
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
man waitpid pour WEXITSTATUS, il faudrait aussi utiliser WIFEXITED pour faire un controle d'erreur plus fin des erreurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include <stdlib.h> #include <stdio.h> #include <sys/wait.h> int main() { int res = system("exit 0"); int res2 = system("exit 42"); printf("%d, %d\n", WEXITSTATUS(res), WEXITSTATUS(res2)); return 0; }
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.
Merci !
Pour ce que je compte faire, c'est bon ! Mais un test me montre que je récupère le reste de mon retour par 256 ! Mon retour ne dépasse pas ce nombre
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Une erreur fréquente est de faire des retours négatifs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int main(void) { return (-1); /* La valeur de retour sera de 255 */ }
“La seule révolution possible, c'est d'essayer de s'améliorer soi-même, en espérant que les autres fassent la même démarche. Le monde ira mieux alors.”
Sauf si on fait un transtypage !Non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part (signed char)WEXITSTATUS(res)
Donc, c'est bien ce que je pensais, on récupère un char à la fin !
C'est sûrement pour ça que popen m'a été conseillé
Modérateur Mageia/Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels : xrandr, algorigramme et C, xml et gtk...
Bonjour,
C'est normal : le code de retour doit généralement tenir sur huit bits, et WEXITSTATUS ne t'en retournera pas plus. Extrait de la man page
Envoyé par man waitpid
Un nombre tronqué sur huit bits est donc forcément son modulo 256 (de la même façon que les deux derniers chiffres d'un nombre décimal, par exemple, sont forcément son modulo 100).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager