CodeBlanks Logo Icon CodeBlanks

signal handler

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

signal fonksiyonu ile sinyal yakalamayı öğrenirsin.

signal işlevi

signal(sig, handler), bir sinyal için işleyici kaydeder. handler, sinyal numarası alan ve void döndüren bir işlevin işaretçisidir.

Örneğin signal(SIGUSR1, handler), SIGUSR1 geldiğinde handler işlevini çağırır. İşleyici içinde yalnızca güvenli işlemler yapmalısın; çünkü sinyal her an gelebilir. signal basittir ama davranışı sistemler arası değişir; üretim kodunda sigaction tercih edilir.

raise ile sinyal gönderme

raise(sig), çağıran sürece sig sinyalını gönderir. kill(getpid(), sig) ile aynı etkiyi yapar.

İşleyici, sinyal geldiğinde sürecin normal akışını keser ve çağrılır. İşleyici dönünce süreç kaldığı yerden devam eder. raise eşzamanlıdır: çağrı, işleyici dönene kadar bekler. Bu yüzden raise(SIGUSR1)'den sonraki satır, işleyici bittikten sonra çalışır. Test için idealdir.

Uygulama Sinyal yakala

int caught = 0; global değişkeni tanımla. void handler(int sig) yaz; içinde caught = 1;. signal(SIGUSR1, handler); ile kaydet. raise(SIGUSR1); ile gönder ve printf("yakalandı=%d\n", caught); ile yazdır.

Başlangıç kodu

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

int caught = 0;

// handler işlevini yaz
// signal ile kaydet
// raise ile gönder ve yazdır

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) {
    signal(SIGUSR1, handler);
    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 İşleyici kavramlarını eşle

Kavram Anlamı
signal İşleyici kaydeder
raise Kendine sinyal
handler İşleyici işlev
SIGUSR1 Kullanıcı sinyali

2 raise(SIGUSR1) ne yapar?

  • Başka sürece sinyal gönderir
  • Çağırana sinyal gönderir Doğru cevap
  • Sinyali yok sayar
  • Sinyali engeller

Açıklama: raise, çağıran sürece sinyal gönderir.

3 İşleyici kaydı

Soru
signal(SIGUSR1, ____);
Cevap
signal(SIGUSR1, handler);

Açıklama: handler işlevi SIGUSR1 için kaydedildi.

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