Получение сигнала, считывание сообщения
Обработчик сигнала вызывает mq_notify для перерегистрации, считывает сообщение и выводит его длину. В этой программе мы игнорируем приоритет полученного сообщения.
ПРИМЕЧАНИЕ
Оператор return в конце sig_usr1 не требуется, поскольку возвращаемое значение отсутствует, а конец текста функции неявно предусматривает возвращение в вызвавшую программу. Тем не менее автор всегда записывает return явно, чтобы указать, что возвращение из этой функции может происходит с особенностями. Например, может произойти преждевременный возврат (с ошибкой EINTR) в потоке, обрабатывающем сигнал.
Запустим теперь эту программу в одном из окон
solaris % mqcreate /test1
solaris % mqnotifysig1 /test1
и затем выполним следующую команду в другом окне
solaris % mqsend /test1 50 16
Как и ожидалось, программа mqnotifysig1 выведет сообщение: SIGUSR1 received, read 50 bytes.
Мы можем проверить, что только один процесс может быть зарегистрирован на получение уведомления в любой момент, запустив копию пpoгрaммы в другом окне:
solaris % mqnotifysig1 /test1
mq_notify error: Device busy
Это сообщение соответствует коду ошибки EBUSY.