Bekleyen Sinyallerin Sınanması
Önceki Sinyallerin Engellenmesi Sonraki
Bekleyen Sinyallerin Sınanması
Bekleyen sinyallerin hangileri olduğunu herhangi bir anda yapacağınız sigpending çağrıları ile öğrenebilirsiniz. Bu işlev signal.h dosyasında bildirilmiştir.
int sigpending
(sigset_t *küme)
işlev
sigpending işlevi bekleyen sinyallere ilişkin bilgileri küme içinde saklar. Alınması engellenmiş bir sinyal varsa, bu sinyal dönen kümenin bir üyesidir. (Bir sinyalin bu kümenin üyesi olup olmadığını Sinyal Kümeleri bölümünde açıklanan sigismember işlevini kullanarak öğrenebilirsiniz.)
Dönen değer bir hata oluşmamışsa 0, aksi takdirde -1'dir.
Bekleyen bir sinyalin olup olmadığına bakmak her zaman kullanışlı olmaz. Engellenmemiş bir sinyalin varlığına bakmak ise daima kötü bir tasarım olur.
Bir örnek:
#include <signal.h>
#include <stddef.h>

sigset_t base_mask, waiting_mask;

sigemptyset (&base_mask);
sigaddset (&base_mask, SIGINT);
sigaddset (&base_mask, SIGTSTP);

/* Diğer işlemler yapılırken kullanıcı kesmeleri engellensin. */
sigprocmask (SIG_SETMASK, &base_mask, NULL);
...

/* Bir süre sonra, bekleyen bir sinyal var mı bakalım. */
sigpending (&waiting_mask);
if (sigismember (&waiting_mask, SIGINT)) {
  /* Kullanıcı süreci sonlandırmayı denedi. */
}
else if (sigismember (&waiting_mask, SIGTSTP)) {
  /* Kullanıcı süreci durdurmayı denedi. */
}
Süreciniz için bekleyen belli bir sinyal varsa, sonradan gelen aynı türdeki sinyallerin iptal edilebileceğini unutmayın. Örneğin, bir SIGINT sinyali askıya alınmışsa başka bir SIGINT sinyali geldiğinde yazılımınız bu sinyali engellenmesi durdurulduktan sonra alacaktır.
Taşınabilirlik Bilgisi
sigpending işlevi POSIX.1 ile gelmiştir. Daha eski sistemler eşdeğeri bir oluşuma sahip değildir.
Önceki Üst Ana Başlık Sonraki
Eylemci Çalışırken Sinyallerin Engellenmesi Başlangıç Bir Sinyalin Eyleminin Sonradan Hatırlanması
Bir Linux Kitaplığı Sayfası