Unix Man (Справочное руководство)


GETMSG(2)


GETMSG(2)

НАЗВАНИЕ


getmsg - извлечение сообщения из потока, ассоциированного с псевдоустройством

СИНТАКСИС

#include <stropts.h>

int getmsg (fd, ctlptr, dataptr, flags) int fd; struct strbuf *ctlptr; struct strbuf *dataptr; int *flags;

ОПИСАНИЕ


Системный вызов getmsg извлекает сообщение из очереди чтения в истоке потока, ассоциированного с псевдоустройством [см. ], и помещает его в буфера, указанные пользователем. Сообщение может состоять из двух частей: области данных и управляющей области, которые помещаются в разные буфера (см. ниже). Семантика каждой части определяется модулем потока, породившего сообщение.

Аргумент fd задает дескриптор файла, ассоциированный с открытым потоком.

Каждый из аргументов ctlptr и dataptr является указателем на структуру типа strbuf, содержащую следующие компоненты:

int maxlen; /* Максимальная длина буфера */ int len; /* Длина извлеченной информации */ char *buf; /* Указатель на буфер */

Компонент buf указывает на буфер, в который должны быть помещены данные или управляющая информация, а maxlen задает размер буфера в байтах. Возвращаемое значение len содержит количество байт данных или управляющей информации, которое фактически было помещено в буфер, или 0, если область данных или управляющая область имеют нулевую длину, или -1, если область данных или управляющая область отсутствуют в данном сообщении.

Переменной, на которую указывает аргумент flags, могут быть присвоены два значения: 0 или RS_HIPRI (см. ниже).

Указатель ctlptr используется для извлечения управляющей области сообщения, dataptr - для извлечения области данных. Если ctlptr (или dataptr) равны NULL, или компонент maxlen равен -1, управляющая область (или область данных) не обрабатывается; она остается в очереди чтения истока, а len устанавливается равным -1. Если компонент maxlen равен 0, а управляющая область (или область данных) содержит ненулевое число байт, они остаются в очереди чтения истока, а len устанавливается равным 0. Если maxlen меньше, чем размер управляющей области (области данных), извлекается только maxlen байт. В этом случае оставшаяся часть остается в очереди чтения истока и возвращается ненулевое значение, как это описано ниже в пункте ДИАГНОСТИКА. Если информация извлекается из приоритетного сообщения, то переменная, на которую указывает аргумент flags, получит значение RS_HIPRI.




Начало  Назад  Вперед



Книжный магазин