Problème d’utilisation des appels système

Je dois comprendre comment écrire une programmation qui boucle mais ne peut pas être quitté en utilisant CTRL-C pendant 5 secondes, mais au bout de 5 secondes, je peux utiliser CTRL-C pour terminer le programme. J’ai lu des articles sur les appels système, mais je ne sais pas par où commencer. Voici les instructions exactes, si quelqu’un peut me diriger dans la bonne direction. Je vous remercie.

Ecrivez un programme C qui utilise des appels système qui créent une boucle et ne peuvent pas être tués avec le contrôle C pendant cinq secondes. Quand il commence il imprime “J’ai commencé à boucler et ne peut pas être tué avec ^ C. . “Puis chaque seconde, il imprime un message qui dit” Toujours en boucle. . . “Après cinq secondes, laissez la boucle se tuer avec le contrôle C et affichez le message” Je suis toujours en boucle mais je peux être tué avec ^ C … “, ceci s’affiche toutes les secondes jusqu’à ce que l’utilisateur le tue.

Vous voulez regarder l’interface signal(2) . Lorsque certains événements liés au processus se produisent dans un environnement UNIX / Linux, le système d’exploitation envoie un signal (essentiellement une interruption logicielle) au processus. Vous pouvez “intercepter” un signal en utilisant la fonction de signal pour définir une fonction de rappel qui est notifiée lorsque le signal donné se produit. Pour un Ctrl-C, vous voulez regarder SIGINT, mais vous pouvez gérer d’autres signaux avec la même interface. En ce qui concerne la pause, c’est facile – il suffit d’utiliser sleep() dans une boucle.

Vous pouvez utiliser celui-ci.

 void handler(int signo) { signal(SIGINT,SIG_DFL); } main() { signal(SIGINT,SIG_IGN); signal(SIGALRM,handler); // your code. alarm(5);// for 5 seconds. while(1) { sleep(1); printf("your message\n"); } } 

D’abord en ignorant le SIGINT en utilisant le singal. Et gestionnaire pour sigalrm. donc 5 premières secondes ctrl+c ne fonctionneront pas. Lorsque le sigalrm est trouvé après le ctrl + c fonctionnera. Donc, selon votre question pour une période donnée, ctrl+c sera arrêté.