Syntax
nepodepsaný int alarm (nepodepsaný int sekund)Funkce je definována v unistd.h hlavičkový soubor.
Argumenty
Funkce trvá jeden argument, sekundy. Po sekundy od požadavku na poplach() funkce, SIGALRM je generován signál. Výchozí chování při přijetí SIGALRM je ukončit proces. Můžeme však zachytit a zvládnout signál. Viz podrobnosti zpracování signálu.
The poplach() funkce vrátí nenulovou hodnotu, pokud byl dříve nastaven jiný alarm a hodnota je počet sekund zbývajících pro předchozí naplánovaný alarm kvůli doručenému. v opačném případě poplach() vrátí nulu.
Příklad 1.C:
#zahrnout#zahrnout
#zahrnout
void sig_handler (int signum)
printf ("Funkce Inside Handler \ n");
int main ()
signál (SIGALRM, sig_handler); // Zaregistrujte obsluhu signálu
alarm (2); // Naplánovaný alarm po 2 sekundách
pro (int i = 1 ;; i ++)
printf ("% d: Uvnitř hlavní funkce \ n", i);
spánek (1); // Zpoždění o 1 sekundu
návrat 0;
Na snímku obrazovky výstupu Příklad 1.C, program se spouští pomocí příkazu time, abychom získali přehled o době provádění programu. Zjistili jsme, že v hlavní funkci, kterou voláme poplach() funkce naplánovaná na 2 sekundy. Takže pro provádění smyčky se po 2 sekundách volá funkce sig_handler a provádění hlavní funkce se pozastaví. Po provedení funkce sig_handler se v hlavní funkci pro provádění smyčky obnoví. Zde používáme funkci spánku pro zpoždění, abychom mohli pochopit průběh provádění. Smyčka for je nekonečná smyčka, když stiskneme klávesu přerušení (Ctrl + C), provádění se zastaví.
Generování SIGALRM použitím signál() funkci nelze skládat. Jen jeden SIGALRM generace lze naplánovat. Postupná volání z signál() funkce reset budíku procesu volání.
Příklad 2.c:
#zahrnout#zahrnout
#zahrnout
void sig_handler (int signum)
printf ("Funkce Inside Handler \ n");
int main ()
signál (SIGALRM, sig_handler); // Zaregistrujte obsluhu signálu
alarm (4); // Naplánovaný alarm po 4 sekundách
alarm (1); // Naplánovaný alarm po 1 sekundě
pro (int i = 1 ;; i ++)
printf ("% d: Uvnitř hlavní funkce \ n", i);
spánek (1); // Zpoždění o 1 sekundu
návrat 0;
Na snímku obrazovky výstupu Příklad 2.C, vidíme, že program byl spuštěn déle než 7 sekund, ale první alarm, který byl naplánován po 4 sekundách, nevyvolává funkci obslužné rutiny. Druhý alarm, který byl naplánován po 1 sekundě, resetuje alarm.
Pokud je hodnota sekund argumentu nula, zruší se jakýkoli dříve vytvořený požadavek na alarm.
Příklad 3.C:
#zahrnout#zahrnout
#zahrnout
void sig_handler (int signum)
printf ("Funkce Inside Handler \ n");
int main ()
signál (SIGALRM, sig_handler); // Zaregistrujte obsluhu signálu
alarm (2); // Naplánovaný alarm po 2 sekundách
alarm (0); // Zrušil předchozí alarm
pro (int i = 1 ;; i ++)
printf ("% d: Uvnitř hlavní funkce \ n", i);
spánek (1); // Zpoždění o 1 sekundu
návrat 0;
Na snímku obrazovky výstupu Příklad 3.C, vidíme, že první alarm, který byl naplánován po 2 sekundách, je zrušen kvůli druhému alarmu na 0 sekund.
v Příklad 4.C uvidíme, jak nepřetržitě můžeme nastavit budík každé 2 sekundy.
Příklad 4.C:
#zahrnout#zahrnout
#zahrnout
void sig_handler (int signum)
printf ("Funkce Inside Handler \ n");
alarm (2); // Naplánujte nový alarm po 2 sekundách
int main ()
signál (SIGALRM, sig_handler); // Zaregistrujte obsluhu signálu
alarm (2); // Naplánujte první alarm po 2 sekundách
pro (int i = 1 ;; i ++)
printf ("% d: Uvnitř hlavní funkce \ n", i);
pauza(); // čekání na zpracování signálu
návrat 0;
Na snímku obrazovky výstupu Příklad 4.C, vidíme, že alarm je nepřetržitý každé 2 sekundy. Resetujeme alarm ve funkci sig_handler.
v Příklad 5.C uvidíme, jak můžeme odložit již naplánovaný alarm. K přerušení použijeme signál SIGINT. Když uživatel zadá Ctrl + C na klávesnici, SIGINT bude generován signál.
Příklad 5.C:
#zahrnout#zahrnout
#zahrnout
void sig_handler (int signum)
if (signum == SIGALRM) // obsluha signálu pro SIGALRM
printf ("Funkce Inside Handler pro SIGALRM \ n");
alarm (2);
if (signum == SIGINT) // obsluha signálu pro SIGINT
printf ("\ nOdložení na 5 sekund ... \ n");
alarm (5);
int main ()
signál (SIGALRM, sig_handler); // Zaregistrujte obsluhu signálu pro SIGALRM
signál (SIGINT, sig_handler); // Zaregistrujte obsluhu signálu pro SIGINT
alarm (2); // Naplánujte první alarm po 2 sekundách
pro (int i = 1 ;; i ++)
printf ("% d: Uvnitř hlavní funkce \ n", i);
pauza(); // čekání na zpracování signálu
návrat 0;
Na snímku obrazovky výstupu Příklad 5.C, vidíme, že když uživatel zadá Ctrl + C, alarm se resetuje na 5 sekund. V tomto programu jsme použili pouze jednu funkci obslužné rutiny pro dva různé signály, ale ve funkci obslužné rutiny bylo zkontrolováno, že pro jaký signál je funkce obslužné rutiny volána.
Závěr:
Viděli jsme tedy, jak lze nastavit funkci alarmu pro spouštěcí signál, jak resetovat alarm, jak zrušit již naplánovaný alarm.