CodeBlanks Logo Icon CodeBlanks

sigaction

  • C kursu
  • İleri seviye
  • Ders 15/83
  • 5 dk

sigaction ile gelişmiş sinyal yönetimini öğrenirsin.

sigaction yapısı

sigaction, signal'ın modern ve taşınabilir alternatifidir. struct sigaction yapısı ile işleyici, maske ve bayrakları ayrı ayrı belirtirsin.

Önce struct sigaction sa; tanımla. sa.sa_handler = handler; ile işleyiciyi ata. sigemptyset(&sa.sa_mask) ile maskeyi boşalt. sa.sa_flags = 0; ile bayrakları sıfırla. Sonra sigaction(SIGUSR1, &sa, NULL) ile kaydet. Bu, signal'dan daha denetimli ve güvenlidir.

sa_flags ve maske

sa_flags, işleyicinin davranışını değiştirir. SA_RESTART sinyal kesilen sistem çağrılarını otomatik yeniden başlatır. SA_SIGINFO işleyiciye ek bilgi geçilmesini sağlar.

sa_mask, işleyici çalışırken engellenecek sinyaller kümesidir. sigemptyset ile boşaltırsan işleyici sırasında başka sinyal engellenmez. sigaddset ile belirli sinyalleri ekleyebilirsin. Bu denetim signal'da yoktur.

Uygulama sigaction ile yakala

int caught = 0; ve void handler(int sig) ile caught = 1;. struct sigaction sa; tanımla; sa.sa_handler = handler;, sigemptyset(&sa.sa_mask);, sa.sa_flags = 0;. sigaction(SIGUSR1, &sa, NULL); ile kaydet. raise(SIGUSR1); ve printf("yakalandı=%d\n", caught);.

Başlangıç kodu

main.c
#include <stdio.h>
#include <signal.h>

int caught = 0;

// handler işlevini yaz
// sigaction yapısı tanımla
// kaydet ve raise ile gönder

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <signal.h>

int caught = 0;

void handler(int sig) {
    caught = 1;
}

int main(void) {
    struct sigaction sa;
    sa.sa_handler = handler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sigaction(SIGUSR1, &sa, NULL);
    raise(SIGUSR1);
    printf("yakalandı=%d\n", caught);
    return 0;
}

Beklenen çıktı

yakalandı=1

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 sa_handler ataması

Soru
sa.sa_handler = ____;
Cevap
sa.sa_handler = handler;

Açıklama: sa_handler, işleyici işlevine atanır.

2 sigaction alanlarını eşle

Kavram Anlamı
sigaction Modern işleyici
sa_handler İşleyici alanı
sa_flags Bayrak alanı
sigemptyset Maskeyi boşalt

3 sigaction, signal'a göre ne avantaj sağlar?

  • Daha hızlıdır
  • Daha az kod gerektirir
  • Daha denetimli ve taşınabilir Doğru cevap
  • Sinyal numarasını değiştirir

Açıklama: sigaction daha denetimli ve sistemler arası tutarlıdır.

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