26.5.5. Проверка наличия сообщения в очереди
26.5.5. Проверка наличия сообщения в очереди
Наверное, вы не хотите, чтобы ваша программа ждала, пока в очереди появится нужное сообщение. Используя особенности системного вызова msgrcv(), можно написать код проверки наличия сообщения определенного типа в очереди. Напишем функцию msg_exists(), которая будет возвращать TRUE, если сообщение есть в очереди, или FALSE, если сообщения в очереди нет.
int msg_exists(int id, long type) {
int res;
if ((result = msgrcv(id, NULL, 0, type, IPC_NOWAIT)) == -1) {
if (errno == E2BIG)
return(TRUE);
}
return(FALSE);
}
В вызове msgrcv() отсутствует адрес буфера и длина сообщения. Этим мы специально провоцируем ошибку, а вызов IPC_NOWAIT отказывает от блокировки процесса. Мы проверяем errno; если он равен E2BIG, значит, сообщение есть в очереди. Ошибка E2BIG порождается потому, что мы установили размер сообщения равным 0.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Определение наличия сообщений в именованных каналах
Определение наличия сообщений в именованных каналах В дополнение к возможности чтения данных из именованного канала с помощью функции ReadFile можно также определить, имеются ли в канале фактические сообщения, используя для этого функцию PeekNamedPipe. Это средство может быть
Эффект наличия слишком большого количества дочерних процессов
Эффект наличия слишком большого количества дочерних процессов В табл. 30.1 (строка 2) указано время (1,8 с), затрачиваемое центральным процессором в случае наличия 15 дочерних процессов, обслуживающих не более 10 клиентов. Мы можем оценить эффект «общей побудки», увеличивая
Эффект наличия слишком большого количества дочерних процессов
Эффект наличия слишком большого количества дочерних процессов Мы можем проверить, возникает ли в данной версии сервера эффект «общей побудки», рассмотренный в предыдущем разделе. Как и раньше, время работы ухудшается пропорционально числу избыточных дочерних
Проверка наличия звуковой системы
Проверка наличия звуковой системы Проверка наличия звуковой системы заключается в том, чтобы отследить, способен ли ваш компьютер:? воспроизводить звук;? записывать звук.К специальному устройству для воспроизведения и записи звука относится звуковая плата.Для проверки
11.2.1. Проверка наличия средств локализации
11.2.1. Проверка наличия средств локализации Современные дистрибутивы Linux (а тем более русифицированные) по умолчанию содержат системные средства локализации, перечисленные в предыдущем разделе.Чтобы убедиться в этом, проверьте, что у вас имеются каталоги /usr/share/locale/* и
Проверка отсутствия/наличия значения. Предикат IS NULL
Проверка отсутствия/наличия значения. Предикат IS NULL ПредикатIS [NOT] NULLпозволяет проверить отсутствие (наличие) значения в полях таблицы. Использование в этих случаях обычных предикатов сравнения может привести к неверным результатам, т.к. сравнение со значением NULL дает
Характерные признаки наличия в компьютере SpyWare
Характерные признаки наличия в компьютере SpyWare В некоторых случаях пользователь может самостоятельно, без применения специальных программ категории AntiSpyware распознать присутствие в компьютере шпионского ПО. Характерные симптомы, позволяющие это сделать, перечислены
Сообщения и очереди сообщений
Сообщения и очереди сообщений GetQueueStatus Функция GetQueueStatus возвращает флаги, которые показывают тип сообщений, обнаруженных в очереди сообщений вызывающего потока. DWORD GetQueueStatus ( UINT flags // флаги состояния очереди ); Параметры flags - определяет флаги состояния очереди, указывая
18.6.2. Контроль наличия файла
18.6.2. Контроль наличия файла В этом примере в цикле until выполняется команда "sleep 1" до тех пор, пока не будет удален файл под именем /tmp/monitor. LCK. После удаления файла сценарий продолжает выполняться в обычном режиме.$ pg until_lck#!/bin/sh# until_lckLOCK_FILE=/trap/process. LCK until [ ! — f $1OCK_FILE ]dosleep 1 done echo
28.1. Определение наличия каталогов уровня выполнения
28.1. Определение наличия каталогов уровня выполнения Каталоги, где хранятся сценарии rc.scripts (здесь фактически речь идет о ссылках, которые мы рассмотрим далее), имеют следующий вид:/etc/rcN.dили/etc/rc.d/rcN.dгде N — число. Обычно это число равно семи, поскольку каталоги rcN. d
Вопросы для оценки наличия интернет-зависимости
Вопросы для оценки наличия интернет-зависимости 1. Как часто вам бывает трудно закончить сеанс пользования Интернетом, если вы вышли в Сеть?2. Как часто вы продолжаете пользоваться Интернетом, хотя, собственно говоря, хотели закончить сеанс?3. Как часто вам говорят другие