Je possède ce code:traitement du signal du clavier, l'ajout de paramètres à la fonction de gestionnaire callback (Ubuntu, intel)
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
// Define the function to be called when ctrl-c (SIGINT) signal is sent to process
void
signal_callback_handler(int signum)
{
printf("Caught signal %d\n",signum);
// Cleanup and close up stuff here
// Terminate program
exit(signum);
}
int main()
{
// Register signal and signal handler
signal(SIGINT, signal_callback_handler);
while(1)
{
printf("Program processing stuff here.\n");
sleep(1);
}
return EXIT_SUCCESS;
}
est-il un moyen de passer un argument supplémentaire dans la fonction de rappel? Quelque chose comme:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
// Define the function to be called when ctrl-c (SIGINT) signal is sent to process
void
signal_callback_handler(int signum, int k)
{
k++; // Changing value of k
}
int main()
{
int k = 0;
// Register signal and signal handler
signal(SIGINT, signal_callback_handler(k);
while(1)
{
printf("Program processing stuff here.\n");
printf(" blah %d\n", k);
sleep(1);
}
return EXIT_SUCCESS;
}
Merci
en utilisant une variable générale? Pouvez-vous être plus précis s'il vous plaît? – mabounassif
Bien sûr, @Mahmoud, voir ma mise à jour. – paxdiablo
Même alors, la variable partagée doit être de type 'sig_atomic_t' ou vous devez soigneusement bloquer les signaux autour des sections critiques (par rapport à la mutation des données partagées entre le programme et le gestionnaire de signal) selon le cas. Voir ["Gestion des signaux"] (http://www.gnu.org/s/libc/manual/html_node/Atomic-Data-Access.html#Atomic-Data-Access) dans la documentation de la bibliothèque GNU C. –