Отправить импульс процессу
#include <sys/neutrino.h>int MsgSendPulse( int coid,int priority,int code,int value );int MsgSendPulse_r( int coid,int priority,int code,int value );
-1
для использования приоритета вызывающего потока. Приоритет должен быть в корректном диапазоне, который можно определить с помощью функций sched_get_priority_min() и sched_get_priority_max().8
-битный код импульса. Несмотря на то, что code может иметь любое знаковое 8
-битное значение, не следует задавать значения code меньше нуля во избежание конфликтов со служебными импульсами ядра или имульсами, сгенерированными менеджерами ресурсов. Все эти коды начинаются со значения PULSE_CODE
и определены в заголовочном файле <sys/neutrino.h>
; для более подробной информации см. описание структуры struct _pulse в документации. Безопасные значения кода импульса лежит в диапазоне от _PULSE_CODE_MINAVAIL
до _PULSE_CODE_MAXAVAIL
.32
-битое значение импульса.libc
Функции MsgSendPulse() и MsgSendPulse_r() посылают короткое неблокирующее сообщение процессу через канал, с котороым установлено соединениеcoid.
Данные функции идентичны за исключением способа возврата ошибок.
Отправка импульса возможна процессу, реальный или эффективный идентивикатор которого соответствует одному из условий:
Проверки прав доступа идентичны тем, которые используются для kill().
MsgSendPulse() может использоваться для разных целей; однако, из-за малой полезной нагрузки не следует использовать импульсы для передачи больших объемов данных путем отправки большого количества импульсов.
Импульсы помещаются в системную очередь для доставки используя динамический пул объектов памяти. Если генерировать импульсы быстрее, чем они могут быть получены сервером, через некоторое время системная очередь израсходует память и при попытке создать новый импульс функция будет возвращать ошибку EAGAIN
. Если приоритет, код и данные импульса не меняются, то ядро будет экономить память с помощью 8
-битного счетчика количества импульсов в очереди.
Эффективный приоритет потока-получателя может измениться при отправке ему импульса. Наследование приоритетов является поведением по умолчанию и может быть изменено с помощью соответствующего флага при вызове функции создания канала. |
При получении импульса с помощью функций MsgReceivev*() значение rcvid будет нуль. Это информирует получателя, что принят импульс и, в отличие от сообщение, на него нельзя ответить с помощью функций MsgReply*().
В клиент-серверных приложениях для отправки импульсов сервер обычно использует функцию MsgDeliverEvent(), а клиент функцию MsgSendPulse(). |
Отсутствует в случае локальной передачи. В сетевом случае:
MsgSendPulse() может использоваться для передачи имульсов по сети.
-1
, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.EOK
возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.
0
). ЗОСРВ «Нейтрино»
Если при доставке импульса на сервере произошла ошибка, то либо импульс будет потерян, либо функция вернёт ошибку.
MsgDeliverEvent(), MsgReceive(), MsgReceivePulse(), MsgReceivePulsev(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgSendPulsePtr(), MsgSend(), MsgSendnc(), MsgSendsv(), MsgSendsvnc(), MsgSendv(), MsgSendvnc(), MsgSendvs(), MsgSendvsnc(), name_open(), struct _pulse, sched_get_priority_min(), sched_get_priority_max()
Предыдущий раздел: Описание API системной библиотеки