Sintaksis
alarm int unsigned (detik int unsigned)Fungsi tersebut didefinisikan dalam unistd.h file header.
Argumen
Fungsi mengambil satu argumen, detik. Setelah detik detik telah berlalu sejak meminta alarm() fungsi, SIGALRM sinyal dihasilkan. Perilaku default saat menerima SIGALRM adalah untuk menghentikan proses. Tapi, kita bisa menangkap dan menangani sinyalnya. Lihat detail penanganan sinyal.
Itu alarm() fungsi akan mengembalikan nilai bukan nol, jika alarm lain telah disetel sebelumnya dan nilainya adalah jumlah detik yang tersisa untuk alarm terjadwal sebelumnya yang akan dikirim. Jika tidak alarm() akan kembali nol.
Contoh 1.c:
#termasuk#termasuk
#termasuk
void sig_handler(int signum)
printf("Fungsi pengendali di dalam\n");
int utama()
sinyal(SIGALRM,sig_handler); // Daftarkan penangan sinyal
alarm (2); // Alarm terjadwal setelah 2 detik
untuk(int i=1;;i++)
printf("%d : Di dalam fungsi utama\n",i);
tidur(1); // Tunda selama 1 detik
kembali 0;
Dalam tangkapan layar dari output Contoh 1.c, program dijalankan menggunakan perintah waktu, sehingga kita bisa mendapatkan gambaran waktu eksekusi program. Kami mengamati bahwa dalam fungsi utama yang kami sebut alarm() fungsi, dijadwalkan selama 2 detik. Jadi, untuk loop sedang dijalankan, setelah 2 detik fungsi sig_handler dipanggil dan eksekusi fungsi utama dijeda. Setelah eksekusi fungsi sig_handler, dalam fungsi utama untuk eksekusi loop dilanjutkan. Di sini kami menggunakan fungsi sleep untuk menunda sehingga kami dapat memahami alur eksekusi. For loop adalah infinite loop, ketika kita menekan tombol interupsi (Ctrl+C), eksekusi akan berhenti.
Menghasilkan SIGALRM menggunakan sinyal() fungsi tidak dapat ditumpuk. Hanya satu SIGALRM generasi dapat dijadwalkan. Panggilan berturut-turut dari sinyal() fungsi mengatur ulang jam alarm dari proses panggilan.
Contoh2.c :
#termasuk#termasuk
#termasuk
void sig_handler(int signum)
printf("Fungsi pengendali di dalam\n");
int utama()
sinyal(SIGALRM,sig_handler); // Daftarkan penangan sinyal
alarm (4); // Alarm terjadwal setelah 4 detik
alarm(1); // Alarm terjadwal setelah 1 detik
untuk(int i=1;;i++)
printf("%d : Di dalam fungsi utama\n",i);
tidur(1); // Tunda selama 1 detik
kembali 0;
Dalam tangkapan layar dari output Contoh2.c, kita dapat melihat bahwa program dijalankan lebih dari 7 detik tetapi alarm pertama yang dijadwalkan setelah 4 detik tidak memanggil fungsi handler. Alarm kedua yang dijadwalkan setelah 1 detik mengatur ulang alarm.
Jika nilai detik argumen adalah nol, maka permintaan alarm yang dibuat sebelumnya dibatalkan.
Contoh3.c:
#termasuk#termasuk
#termasuk
void sig_handler(int signum)
printf("Fungsi pengendali di dalam\n");
int utama()
sinyal(SIGALRM,sig_handler); // Daftarkan penangan sinyal
alarm (2); // Alarm terjadwal setelah 2 detik
alarm(0); // Membatalkan alarm sebelumnya
untuk(int i=1;;i++)
printf("%d : Di dalam fungsi utama\n",i);
tidur(1); // Tunda selama 1 detik
kembali 0;
Dalam tangkapan layar dari output Contoh3.c, kita dapat melihat bahwa alarm pertama yang dijadwalkan setelah 2 detik dibatalkan karena alarm kedua selama 0 detik.
Di Contoh4.c kita akan melihat bagaimana terus menerus kita dapat mengatur alarm untuk setiap 2 detik.
Contoh4.c:
#termasuk#termasuk
#termasuk
void sig_handler(int signum)
printf("Fungsi pengendali di dalam\n");
alarm (2); // Jadwalkan alarm baru setelah 2 detik
int utama()
sinyal(SIGALRM,sig_handler); // Daftarkan penangan sinyal
alarm (2); // Jadwalkan alarm pertama setelah 2 detik
untuk(int i=1;;i++)
printf("%d : Di dalam fungsi utama\n",i);
berhenti sebentar(); // menunggu sampai sinyal ditangani
kembali 0;
Dalam tangkapan layar dari output Contoh4.c, kita dapat melihat bahwa alarm terus menerus setiap 2 detik. Kami mengatur ulang alarm di fungsi sig_handler.
Di Contoh5.c kita akan melihat bagaimana kita dapat menunda alarm yang sudah dijadwalkan. Kami akan menggunakan sinyal SIGINT untuk interupsi. Saat pengguna mengetik Ctrl+C di keyboard, TANDA TANGAN sinyal akan menghasilkan.
Contoh5.c:
#termasuk#termasuk
#termasuk
void sig_handler(int signum)
if(signum == SIGALRM) //penangan sinyal untuk SIGALRM
printf("Fungsi pengendali di dalam untuk SIGALRM\n");
alarm (2);
if(signum == SIGINT) // pengendali sinyal untuk SIGINT
printf("\nTunda selama 5 detik... \n");
alarm (5);
int utama()
sinyal(SIGALRM,sig_handler); // Daftarkan pengendali sinyal untuk SIGALRM
sinyal(SIGINT,sig_handler); // Daftarkan pengendali sinyal untuk SIGINT
alarm (2); // Jadwalkan alarm pertama setelah 2 detik
untuk(int i=1;;i++)
printf("%d : Di dalam fungsi utama\n",i);
berhenti sebentar(); // menunggu sampai sinyal ditangani
kembali 0;
Dalam tangkapan layar dari output Contoh5.c, kita dapat melihat bahwa ketika pengguna mengetik Ctrl + C, alarm disetel ulang 5 detik. Dalam program ini kita hanya menggunakan satu fungsi handler untuk dua sinyal yang berbeda tetapi dalam fungsi handler telah diperiksa untuk sinyal mana fungsi handler dipanggil.
Kesimpulan:
Jadi, kita telah melihat bagaimana fungsi alarm dapat diatur untuk memicu sinyal, cara mengatur ulang alarm, cara membatalkan alarm yang sudah dijadwalkan.