Eylemci İşlevlerde Denetimin Aktarımı
Önceki Sinyal Yakalayıcıların Tanımlanması Sonraki
Eylemci İşlevlerde Denetimin Aktarımı
Bir sinyal yakalayıcı için setjmp ve longjmp oluşumları kullanılarak denetim başka bir yere aktarılabilir. Bkz. Yerel Olmayan Çıkışlar.
Bir eylemci denetimi dışarı aktardığı zaman, çalışmakta olan yazılım kalan işlemi biteremez. Örneğin yazılım o anda önemli bir veri yapısını güncelliyorsa, veri yapısı belirsiz bir durumda kalacaktır. Süreç sonlandırıldığından belirsizlik daha sonra benzer şekilde bildirilecektir.
Bu sorundan kaçınmanın iki yolu vardır. Biri, önemli veri yapısının güncellenmesi bitene kadar sinyalin engellenmesidir. Bkz. Sinyallerin Engellenmesi.
Diğer yol ise, önemli veri yapısını eylemci içinde yeniden ilklendirmek ve değerlerini belirli yapmaktır.
Örnekte, bir genel değişkenin yeniden ilklendirilmesi gösterilmiştir:
#include <signal.h>
#include <setjmp.h>

jmp_buf return_to_top_level;

volatile sig_atomic_t waiting_for_input;

void
handle_sigint (int signum)
{
  /* Sinyal alındığında girdi için beklemeliyiz, ama denetimi
     aktaracağımızdan artık bekleyemeyiz.  */
  waiting_for_input = 0;
  longjmp (return_to_top_level, 1);
}

int
main (void)
{
  ...
  signal (SIGINT, sigint_handler);
  ...
  while (1) {
    prepare_for_command ();
    if (setjmp (return_to_top_level) == 0)
      read_and_execute_command ();
  }
}

/* Bunun çeşitli komutlar için kullanılan bir yordam
   olduğunu hayal edin. */
char *
read_data ()
{
  if (input_from_terminal) {
    waiting_for_input = 1;
    ...
    waiting_for_input = 0;
  } else {
    ...
  }
}
Önceki Üst Ana Başlık Sonraki
Süreci Sonlandıran Eylemciler Başlangıç Eylemci Çalışırken Sinyal Alınması
Bir Linux Kitaplığı Sayfası