Syntaks
usigneret int alarm (usigneret int sekunder)Funktionen er defineret i unistd.h header-fil.
Argumenter
Funktionen tager et argument, sekunder. Efter sekunder sekunder er gået siden anmodning om alarm() funktion, den SIGALRM signalet genereres. Standardadfærden ved modtagelse af SIGALRM er at afslutte processen. Men vi kan fange og håndtere signalet. Se oplysninger om signalhåndtering.
Det alarm () funktionen returnerer en værdi, der ikke er nul, hvis en anden alarm tidligere er indstillet, og værdien er antallet af resterende sekunder for den tidligere planlagte alarm på grund af leveret. Ellers alarm () returnerer nul.
Eksempel 1.c:
#omfatte#omfatte
#omfatte
ugyldig sig_handler (int signum)
printf ("Inside handler-funktion \ n");
int main ()
signal (SIGALRM, sig_handler); // Registrer signalhåndterer
alarm (2); // Planlagt alarm efter 2 sekunder
for (int i = 1 ;; i ++)
printf ("% d: Inde i hovedfunktionen \ n", i);
søvn (1); // Forsink i 1 sekund
returnere 0;
På skærmbilledet af output af Eksempel 1.c, programmet køres ved hjælp af tidskommando, så vi kan få et overblik over programmets udførelsestid. Vi observerede, at vi i hovedfunktion kalder alarm () funktion, planlagt til 2 sekunder. Så for loop udføres, efter 2 sekunder kaldes sig_handler-funktion, og udførelsen af hovedfunktionen er sat på pause. Efter udførelse af sig_handler-funktion genoptages hovedfunktionen til loopudførelse. Her bruger vi søvnfunktion til forsinkelse, så vi kan forstå strømmen af udførelsen. For-sløjfen er en uendelig sløjfe, når vi trykker på en afbrydelsestast (Ctrl + C), stopper udførelsen.
Genererer SIGALRM ved brug af signal() funktionen kan ikke stables. Kun en SIGALRM generation kan planlægges. Efterfølgende opkald fra signal() funktion nulstiller alarmuret i opkaldsprocessen.
Eksempel 2.c:
#omfatte#omfatte
#omfatte
ugyldig sig_handler (int signum)
printf ("Inside handler-funktion \ n");
int main ()
signal (SIGALRM, sig_handler); // Registrer signalhåndterer
alarm (4); // Planlagt alarm efter 4 sekunder
alarm (1); // Planlagt alarm efter 1 sekund
for (int i = 1 ;; i ++)
printf ("% d: Inde i hovedfunktionen \ n", i);
søvn (1); // Forsink i 1 sekund
returnere 0;
På skærmbilledet af output af Eksempel 2.c, vi kan se, at programmet blev udført mere end 7 sekunder, men den første alarm, der var planlagt efter 4 sekunder, kalder ikke behandlerfunktionen. Den anden alarm, der var planlagt efter 1 sekund, nulstilles alarmen.
Hvis værdien af argumentets sekunder er nul, annulleres enhver tidligere foretaget alarmanmodning.
Eksempel 3.c:
#omfatte#omfatte
#omfatte
ugyldig sig_handler (int signum)
printf ("Inside handler-funktion \ n");
int main ()
signal (SIGALRM, sig_handler); // Registrer signalhåndterer
alarm (2); // Planlagt alarm efter 2 sekunder
alarm (0); // Annullerede den forrige alarm
for (int i = 1 ;; i ++)
printf ("% d: Inde i hovedfunktionen \ n", i);
søvn (1); // Forsink i 1 sekund
returnere 0;
På skærmbilledet af output af Eksempel 3.c, vi kan se, at den første alarm, der var planlagt efter 2 sekunder, annulleres på grund af den anden alarm i 0 sekund.
I Eksempel 4.c vi vil se, hvor kontinuerligt vi kan indstille en alarm i hvert 2. sekund.
Eksempel 4.c:
#omfatte#omfatte
#omfatte
ugyldig sig_handler (int signum)
printf ("Inside handler-funktion \ n");
alarm (2); // Planlæg en ny alarm efter 2 sekunder
int main ()
signal (SIGALRM, sig_handler); // Registrer signalhåndterer
alarm (2); // Planlæg den første alarm efter 2 sekunder
for (int i = 1 ;; i ++)
printf ("% d: Inde i hovedfunktionen \ n", i);
pause(); // venter på, at signalet håndteres
returnere 0;
På skærmbilledet af output af Eksempel 4.c, vi kan se, at alarmen er kontinuerlig hvert 2. sekund. Vi nulstiller alarmen i sig_handler-funktionen.
I Eksempel 5.c vi vil se, hvordan vi kan forsinke den allerede planlagte alarm. Vi bruger SIGINT-signal til afbrydelse. Når brugeren skriver Ctrl + C på tastaturet, SIGINT signalet genereres.
Eksempel 5.c:
#omfatte#omfatte
#omfatte
ugyldig sig_handler (int signum)
hvis (signum == SIGALRM) // signalhåndtering til SIGALRM
printf ("Indehåndteringsfunktion til SIGALRM \ n");
alarm (2);
hvis (signum == SIGINT) // signalhåndtering til SIGINT
printf ("\ nSlukker i 5 sekunder ... \ n");
alarm (5);
int main ()
signal (SIGALRM, sig_handler); // Registrer signalhåndterer til SIGALRM
signal (SIGINT, sig_handler); // Registrer signalhåndterer for SIGINT
alarm (2); // Planlæg den første alarm efter 2 sekunder
for (int i = 1 ;; i ++)
printf ("% d: Inde i hovedfunktionen \ n", i);
pause(); // venter på, at signalet håndteres
returnere 0;
På skærmbilledet af output af Eksempel 5.c, vi kan se, at når brugertype Ctrl + C nulstilles alarmen 5 sekunder. I dette program har vi kun brugt en behandlingsfunktion til to forskellige signaler, men i behandlingsfunktionen er det kontrolleret, for hvilket signal handlingsfunktionen kaldes.
Konklusion:
Så vi har set, hvordan alarmfunktion kan indstilles til at udløse signal, hvordan man nulstiller alarm, hvordan man annullerer allerede planlagt alarm.