Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2399 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fork et code retour

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fork et code retour

n°1024688
stef203
Posté le 25-03-2005 à 12:28:26  profilanswer
 

bonjour à tous,
 
Bon désolé si la solution a déjà été donné sur le forum (en tout cas j'ai pas trouvé la totalité de la réponse...), mais j'ai une question.
 
Je veux faire executer un script par un fils et savoir si ce script n'a pas retourné d'erreur. Donc en gros, je fais un fork puis un execl, et avec le père j'attend la mort du fils avec un wait, mais comment connaitre le code de retour du script. Attention, je ne veux pas lire la sortie standard du script (comme on pourrait le faire avec popen), je veux le code de retour du script pour savoir s'il a pas foiré. Mon problème c'est que c'est bien beau d'attendre le fils, mais il me dit pas si le script a bien marché. J'espère que je suis assez clair...
 
merci d'avance.
a+

mood
Publicité
Posté le 25-03-2005 à 12:28:26  profilanswer
 

n°1024711
Sve@r
Posté le 25-03-2005 à 12:54:06  profilanswer
 

stef203 a écrit :

bonjour à tous,
 
Bon désolé si la solution a déjà été donné sur le forum (en tout cas j'ai pas trouvé la totalité de la réponse...), mais j'ai une question.
 
Je veux faire executer un script par un fils et savoir si ce script n'a pas retourné d'erreur. Donc en gros, je fais un fork puis un execl, et avec le père j'attend la mort du fils avec un wait, mais comment connaitre le code de retour du script. Attention, je ne veux pas lire la sortie standard du script (comme on pourrait le faire avec popen), je veux le code de retour du script pour savoir s'il a pas foiré. Mon problème c'est que c'est bien beau d'attendre le fils, mais il me dit pas si le script a bien marché. J'espère que je suis assez clair...


 
Quand tu fais un "wait", tu lui passes en paramètre l'adresse d'une variable de type "int"

Code :
  1. int retour;
  2. ...
  3. wait(&retour);


 
Lorsque la fonction "wait" récupèrera le fils qui se termine, elle stockera dans la variable dont tu lui as passé l'adresse la cause de la mort du fils
- si le fils a été killé par un "kill(x)", la valeur "x" sera stockée dans l'octet de poid faible de ta variable (les 8 derniers bits)
- si le fils s'est terminé avec "exit(y)", la valeur "y" (correspondant au code de retour) sera stockée dans l'octet de poid fort de ta variable (les 8 premiers bits) et les 8 bits restants (réservés à la valeur "x" ) seront mis à 0 ce qui te permet de vérifier si c'est "kill" ou "exit"
 
Pour tester les bits de ta variable, tu peux utiliser les opérateurs "OU" et "ET" mais c'est pas portable. Si t'inclues "sys/wait.h" tu auras à ta disposition 4 macro pour faire le boulot à ta place:
- WIFEXITED(retour) te renvoie "vrai" si ça a été "exit"
- WIFSIGNALED(retour) te renvoie "vrai" si ça a été "kill"
- WEXITSTATUS(retour) te renvoie la valeur du "exit"
- WTERMSIG(retour) te renvoie la valeur du "kill"
 
Il y a un truc qui me chiffonne, c'est que toute cette théorie marche très bien quand on programme soi-même son fils. Je ne sais pas trop comment ça se passe lorsque le fils a été remplacé par le programme lancé par "execl" (recouvrement du processus fils par le nouveau programme)...


Message édité par Sve@r le 25-03-2005 à 12:57:51

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1024745
stef203
Posté le 25-03-2005 à 13:34:55  profilanswer
 

ok merci je vais regarder de ce coté la, a priori, ca semble être pile poil ce qu'il me faut.

n°1024907
matafan
Posté le 25-03-2005 à 15:45:51  profilanswer
 

Sve@r a écrit :

Il y a un truc qui me chiffonne, c'est que toute cette théorie marche très bien quand on programme soi-même son fils. Je ne sais pas trop comment ça se passe lorsque le fils a été remplacé par le programme lancé par "execl" (recouvrement du processus fils par le nouveau programme)...


 
Ca ne change absolument rien. Tu recois le code de retour du processus execute et le signal qui l'a tue.

n°1025199
Sve@r
Posté le 25-03-2005 à 18:21:20  profilanswer
 

matafan a écrit :

Ca ne change absolument rien. Tu recois le code de retour du processus execute et le signal qui l'a tue.


 
Merci  :sol:


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fork et code retour

 

Sujets relatifs
pb de portage de codeEditer du code C++ avec Doxygen
question bateau: ecrire un retour ligne dans fichierQuelqu'un pour me faire un code tout con ?
Avis sur mon code - Sécurité.Recuperation Code Source d'une page ASP, pour mettre dans une variable
inserer une zone de code dans une page webExecuter un code java
[ Pocket PC ] gestion des code barre et PHP ? 
Plus de sujets relatifs à : fork et code retour


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR