Özet - Sinyal yönetimi
- C kursu
- İleri seviye
- Ders 18/83
- 5 dk
sigaction, kill ve güvenliği birleştirerek bir sinyal yakalayıcı yazarsın.
Sinyal yakalayıcı
Bu grupta sinyallerin temelini öğrendin: sinyal kavramı, signal ve sigaction ile işleyici, kill ile gönderme ve sinyal güvenliği. Üçü birlikte güvenli bir sinyal sistemi kurar.
Şimdi bunları birleştirerek bir sinyal yakalayıcı yazacaksın: sigaction ile işleyici kur, kill ile kendine sinyal gönder ve volatile sig_atomic_t bayrakla sonucu denetle. Bu desen, arka plan sunucularında yaygındır.
Uygulama Sinyal yakalayıcı
volatile sig_atomic_t flag = 0; ve void handler(int sig) ile flag = 1;. struct sigaction sa; tanımla; sa.sa_handler = handler;, sigemptyset(&sa.sa_mask);, sa.sa_flags = 0;. sigaction(SIGUSR1, &sa, NULL); ile kaydet. kill(getpid(), SIGUSR1); ve printf("flag=%d\n", flag);.
Başlangıç kodu
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// bayrak değişkenini tanımla
// handler yaz
// sigaction yapısı ile kaydet
// kill ile gönder ve yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
volatile sig_atomic_t flag = 0;
void handler(int sig) {
flag = 1;
}
int main(void) {
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGUSR1, &sa, NULL);
kill(getpid(), SIGUSR1);
printf("flag=%d\n", flag);
return 0;
}Beklenen çıktı
flag=1
Sonraki adımlar
Sinyal yönetimini öğrendin. Sonraki gruplarda çoklu iş parçacığı ile eşzamanlı çalışmayı ve soketlerle ağ iletişimini göreceksin.
Sinyaller, iş parçacıklarıyla birlikte düşünülür: bir sinyal hangi iş parçacığını keser? sigaction ile süreç genelinde işleyici kurulur. Soketlerde ise bağlantı kopması sinyalle bildirilebilir. SIGPIPE yazma hatasını, SIGIO ise hazır veriyi haber verir.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Güvenli bir sinyal sistemi hangi üçlüyle kurulur?
- signal, fork, exec
- sigaction, kill, sig_atomic_t Doğru cevap
- printf, malloc, free
- open, read, write
Açıklama: sigaction, kill ve sig_atomic_t güvenli sistemi kurar.
2 Sistem bileşenlerini eşle
| Kavram | Anlamı |
|---|---|
sigaction |
İşleyici kurar |
kill |
Sinyal gönderir |
sig_atomic_t |
Güvenli bayrak |
raise |
Kendine sinyal |