sigaction Örneği
Önceki Sinyal Eylemlerinin Belirtilmesi Sonraki
sigaction Örneği
Basit Sinyal İşleme bölümünde sonlandırma sinyalleri için signal işlevi kullanılan basit bir eylemci örneği verilmişti. Burada bu örneğin sigaction eşdeğerini bulacaksınız:
#include <signal.h>

void
termination_handler (int signum)
{
  struct temp_file *p;

  for (p = temp_file_list; p; p = p->next)
    unlink (p->name);
}

int
main (void)
{
  ...
  struct sigaction yeni_eylem, eski_eylem;

  /* Yeni eylemi içeren yapıyı hazırlayalım. */
  yeni_eylem.sa_handler = termination_handler;
  sigemptyset (&yeni_eylem.sa_mask);
  yeni_eylem.sa_flags = 0;

  sigaction (SIGINT, NULL, &eski_eylem);
  if (eski_eylem.sa_handler != SIG_IGN)
    sigaction (SIGINT, &yeni_eylem, NULL);
  sigaction (SIGHUP, NULL, &eski_eylem);
  if (eski_eylem.sa_handler != SIG_IGN)
    sigaction (SIGHUP, &yeni_eylem, NULL);
  sigaction (SIGTERM, NULL, &eski_eylem);
  if (eski_eylem.sa_handler != SIG_IGN)
    sigaction (SIGTERM, &yeni_eylem, NULL);
  ...
}
Yazılım, yeni_eylem veri yapısını istenen parametrelerle yükler ve onu sigaction çağrısına aktarır. sigemptyset işlevinin kullanımı Sinyallerin Engellenmesi bölümünde açıklanmıştır.
signal işlevinin kullanıldığı örnekte, evvelce yoksayılmaya ayarlanmış sinyalleri işlemekten kaçınmıştık. Bu örnekte ise yeni eylemi etkin kılmadan önce evvelki eylemi sigaction oluşumu sayesinde inceleme şansımız var. Böylece anlık bile olsa yoksayılmaya ayarlanmış bir sinyal eylemciyi değiştirmemiş oluyoruz.
Aşağıda başka bir örnek var. SIGINT sinyali için eylemi değiştirmeksizin mevcut eylem hakkında bilgi alıyoruz:
struct sigaction query_action;

if (sigaction (SIGINT, NULL, &query_action) < 0)
  /* sigaction hata durumunda -1 döndürüyor. */
else if (query_action.sa_handler == SIG_DFL)
  /* SIGINT öntanımlı olarak yakalanıyor, ölümcül durum. */
else if (query_action.sa_handler == SIG_IGN)
  /* SIGINT yoksayılıyor. */
else
  /* Tanımlanan sinyal yakalayıcı etkinleştiriliyor. */
Önceki Üst Ana Başlık Sonraki
signal ve sigaction arasındaki etkileşim Başlangıç sigaction Seçenekleri
Bir Linux Kitaplığı Sayfası