Dönen Sinyal Yakalayıcılar
Önceki Sinyal Yakalayıcıların Tanımlanması Sonraki
Dönen Sinyal Yakalayıcılar
Normal olarak dönen eylemciler genellikle, G/Ç ve süreçler arası iletişim sinyalleri ile SIGALRM benzeri sinyaller için kullanılır. Ancak, SIGINT sinyali için de bir eylemci dönebilir. Bir farkla, sürece uygun bir zamanda sonlanmasını söyleyen bir seçeneği etkinleştirerek döner.
Bir yazılım hata sinyali için normal olarak dönen bir işlev yazmak doğru olmayacaktır. Çünkü yazılımın davranışının bir yazılım hatası sinyali alındıktan sonra ne olacağı belli değildir. Bkz. Yazılım Hatalarının Sinyalleri.
Normalde dönen eylemciler bir etki yaratması umulan bir genel değişkene değer atamalıdır. Bu değişken yazılımın çalışma anında belirli aralıklarla baktığı bir değişken olmalıdır. Atomik Veri Erişimi ve Sinyal İşleme bölümünde açıklanan sebeplerle bu değişkenin veri türü sig_atomic_t olmalıdır.
Aşağıda, böyle bir yazılım örneği vardır. Bir SIGALRM sinyali alınıncaya kadar bir döngüyü çalıştırmaktadır. Bu teknik, döngü tamamlanmadan bir sinyal alınıncaya kadar yinelenen işlemler için yararlıdır.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

/* Bu değişken döngünün denetimi içindir. */
volatile sig_atomic_t keep_going = 1;

/* Sinyal yakalayıcı değişkeni sıfırlar ve kendini tekrar etkinleştirir. */
void
catch_alarm (int sig)
{
  keep_going = 0;
  signal (sig, catch_alarm);
}

void
do_stuff (void)
{
  puts ("Uyarı gelene kadar birşeyler yapılıyor....");
}

int
main (void)
{
  /* SIGALRM sinyalleri için bir eylemci oluşturalım. */
  signal (SIGALRM, catch_alarm);

  /* kısa süreli bir uyarıyı etkinleştirelim. */
  alarm (2);

  /* Her çevrimde değişkenin değerine bakılsın. */
  while (keep_going)
    do_stuff ();

  return EXIT_SUCCESS;
}
Önceki Üst Ana Başlık Sonraki
Sinyal Yakalayıcıların Tanımlanması Başlangıç Süreci Sonlandıran Eylemciler
Bir Linux Kitaplığı Sayfası