CodeBlanks Logo Icon CodeBlanks

Ö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

main.c
#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

main.c
#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

İleri seviye bölümündeki tüm dersler