Распечатка 7.9 Асинхронное уведомление с помощью SIGEV_SIGNAL

Предыдущая  Содержание  Следующая V*D*V

Распечатка 7.9.

 

struct sigevent notif;

sigset_t sig_set;

siginfo_t info;

      ....

 

/* Сигналом уведомления является SIGUSR1. */

sigemptyset(&sig_set);

sigaddset(&sig_set, SIGUSR1);

 

/*

 * Блокируем SIGUSR1, так как мы будем ждать его

 * в вызове sigwaitinfo

 */

sigprocmask(SIG_BLOCK, &sig_set, NULL);

 

/* Теперь настраиваем уведомление */

notif.sigev_notify = SIGEV_SIGNAL;

notif.sigev_signo = SIGUSR1;

 

if (mq_notify(ds, &notif)){

  perror("mq_notify");

  return -1;

}

 

/*

 * Если в очередь поступит сообщение, будет

 * доставлен SIGUSR1

 */

do {

  sigwaitinfo(&sig_set, &info);

} while(info.si_signo != SIGUSR1);

 

/* Теперь можно принять сообщение. */

if (mq_receive(ds, new_text, SIZE, &prio) == -1)

  perror("Receiving message error");

 

      ....

 

Предыдущая  Содержание  Следующая