begin process at 2008 08 21 05:34:38
1 229 221 membres
52 nouveaux aujourd'hui
14 260 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Passage de parametres a une fonction [ Linux / Autre ] (AsM0DeUz)

Passage de parametres a une fonction le 17/07/2008 14:35:44

AsM0DeUz
Bonjour,

Je suis en train de lire le document "Programmation avancée sous Linux" dans lequel j'ai trouvé le code ci-dessous dans le chapitre relatis aux signaux :

# include < signal.h >
# include < string.h >
# include < sys/types.h >
# include < sys/wait.h >
sig_atomic_t child_exit_status ;

void clean_up_child_process ( int signal_number )
{
   /* Nettoie le ou les processus fils . */
   int status ;
   while ( waitpid ( -1 , & status , WNOHANG ) ) ;
   /* Stocke la statut de sortie du dernier dans une variable globale .
   child_exit_status = status ;
}

int main ()
{
   /* Gère SIGCHLD en appelent clean_up_child_process. */
   struct sigaction sigchld_action ;
   memset (& sigchld_action , 0 , sizeof ( sigchld_action ) ) ;
  
sigchld_action.sa_handler = &clean_up_child_process;
   sigaction ( SIGCHLD , & sigchld_action , NULL ) ;
   /* Faire diverses choses , entre autres créer un processus fils . */
   /* ... */
   return 0;
}

A quel endroit se fait le passage de paramètre à la fonction qui doit recevoir un int ?

Merci

Re : Passage de parametres a une fonction le 17/07/2008 15:55:10

rt15
Membre Club
Réponse acceptée !

Salut,

sigchld_action.sa_handler = &clean_up_child_process;

Ici, tu met en place l'adresse de clean_up_child_process dans une structure.
Comme l'indique le champ de cette structure, ta fonction est un handler (On parle aussi de callback).

Tu passe ensuite cette structure en argument de sigaction (ici, l'aide de sigaction et les pages de man).

La fonction clean_up_child_process va en fait être appelée non pas par ton propre code, mais par Linux.

Linux s'attend à ce que l'adresse que tu lui donne corresponde à l'adresse d'une fonction qui attend un entier en paramètre, et va passer ce paramètre en argument, de manière à ce que tu le récupère. Si tu met un argument supplémentaire à cleanup, ou que tu enlève le int,le programme a de bonne chances de planter à cause d'un décalage de pile.

clean_up_child_process va être appelé par Linux quand il souhaitera t'informer de l'arrivé d'un message SIGCHLD (Autrement dit, à la fin d'exécution d'un processus fils).

Je suis pas sûre d'avoir été très clair...


Re : Passage de parametres a une fonction le 18/07/2008 09:02:21

AsM0DeUz
Tres clair  Merci


Classé sous : action, include, status, child, sigchld

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
extraction dinformatio...
Budget : 300€
campagne Adwords
Budget : 5 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS