Retourner une variable
Résolu/Fermé
fabinou
-
2 mai 2013 à 19:38
mamiemando Messages postés 33433 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 décembre 2024 - 3 mai 2013 à 07:37
mamiemando Messages postés 33433 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 décembre 2024 - 3 mai 2013 à 07:37
A voir également:
- Retourner une variable
- Retourner ecran windows - Guide
- Comment retourner une video - Guide
- Retourner à la ligne dans une cellule excel - Guide
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Windows 10
2 réponses
mamiemando
Messages postés
33433
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 décembre 2024
7 809
2 mai 2013 à 21:15
2 mai 2013 à 21:15
Bah déjà , autant tout faire en C :
Résultat :
En effet l'utilisation de la commande "system" rend ton programme écrit en C dépendant d'un script (pourquoi pas dans l'absolu) et souvent du système sur lequel est lancé le programme (par exemple écrire system("PAUSE"), comme on le voit souvent, est une mauvaise approche). En fait pour faire le travail proprement il faudrait faire des trucs dans ce genre :
https://stackoverflow.com/questions/903864/how-to-exit-a-child-process-and-return-its-status-from-execvp
De manière générale pour appeler un programme tiers (ici ton script shell) il est mieux d'utiliser la commande execvp.
Supposons que j'ai un script plop.sh qui contiennent :
J'obtiens bien le résultat attendu :
Si on veut vraiment utiliser la fonction "system", pour rattraper ça dans un programme C en utilisant system il faut comme indiqué dans le man utiliser WEXITSTATUS :
https://linux.die.net/man/3/system
Bonne chance
#include <stdio.h> size_t count_dot(const char *s) { size_t count = 0; for (; *s; s++) { if (*s == '.') count++; } return count; } int main() { const char * s = "Bonjour. Au revoir..."; printf("%s --> %d\n", s, count_dot(s)); return 0; }
Résultat :
Bonjour. Au revoir... --> 4
En effet l'utilisation de la commande "system" rend ton programme écrit en C dépendant d'un script (pourquoi pas dans l'absolu) et souvent du système sur lequel est lancé le programme (par exemple écrire system("PAUSE"), comme on le voit souvent, est une mauvaise approche). En fait pour faire le travail proprement il faudrait faire des trucs dans ce genre :
https://stackoverflow.com/questions/903864/how-to-exit-a-child-process-and-return-its-status-from-execvp
De manière générale pour appeler un programme tiers (ici ton script shell) il est mieux d'utiliser la commande execvp.
Supposons que j'ai un script plop.sh qui contiennent :
#!/bin/bash exit $(echo $1 | tr -cd '.' | wc -c )
J'obtiens bien le résultat attendu :
(mando@silk) (~) $ sh plop.sh "Bonjour. Au revoir..." (mando@silk) (~) $ echo $? 4
Si on veut vraiment utiliser la fonction "system", pour rattraper ça dans un programme C en utilisant system il faut comme indiqué dans le man utiliser WEXITSTATUS :
https://linux.die.net/man/3/system
#include <stdio.h> #include <stdlib.h> int main() { int ret = WEXITSTATUS(system("/home/mando/plop.sh \"Bonjour. Au revoir...\"")); printf("--> %d", ret); return 0; }
Bonne chance
Bonjour Mamiemando,
Effectivement, tout faire en C aurait été plus simple, mais utiliser le script est la méthode qui m'est imposée, je suis donc obligé de faire de cette façon.
effectivement, je ne connaissais pas WEXITSTATUS, et je pense que cela va beaucoup m'aider.
Merci beaucoup pour ton aide, je reposterai si jamais mais je pense pouvoir m'en sortir ainsi.
Merci à toi !
Effectivement, tout faire en C aurait été plus simple, mais utiliser le script est la méthode qui m'est imposée, je suis donc obligé de faire de cette façon.
effectivement, je ne connaissais pas WEXITSTATUS, et je pense que cela va beaucoup m'aider.
Merci beaucoup pour ton aide, je reposterai si jamais mais je pense pouvoir m'en sortir ainsi.
Merci à toi !
mamiemando
Messages postés
33433
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 décembre 2024
7 809
3 mai 2013 à 07:37
3 mai 2013 à 07:37
Je t'en prie :-) Bonne continuation !