ВУЗ:
Составители:
21
Параметр msgsz определяет длину сообщения. При значении параметра
msgflg=0 процесс может блокироваться до тех пор, пока функция не будет вы-
полнена. Параметр msgtyp задает правила выбора сообщения из очереди. При
нулевом значении параметра из очереди извлекается самое старое сообщение
любого типа. Положительное значение определяет прием самого старого сооб-
щения указанного
типа.
Удаление очереди из системы производится при вызове функции
int msgctl(int msgid, int cmd, struct msgbuf *msgp);
при значении параметра cmd равном IPC_RMID ,третий параметр при этом ус-
танавливается в значение NULL.
Рассмотрим две программы. Первая будет выполнять роль сервера. Она
создает очередь сообщений и посылает второй программе – клиенту строку вве-
денного с клавиатуры текста. Для предварительного формирования
сообщения
создается структура buf по шаблону mybuf. По запросу с клавиатуры водится
строка текста (строка text).
Далее формируется ключ. Исходной строкой для формирования ключа
служит имя файла с текстом программы "smess.c". Очередь сообщений созда-
ется по полученному ранее ключу с правами доступа для пользователя на чтение
и запись, для остальных
разрешено только чтение из очереди.
После создания очереди сообщений в буфер записывается текст введенно-
го ранее сообщения и устанавливается тип сообщения. Далее сервер пересылает
сформированное сообщение клиенту и завершает работу.
Трансляция сервера производится по командной строке
cc smess.c –o smess. В результате компиляции и компоновки формирует-
ся исполняемый файл smess.
/* Сервер работы с
сообщениями */
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int main()
{
key_t key;
struct mybuf {
long mtype;
char mtext[81];
Параметр msgsz определяет длину сообщения. При значении параметра msgflg=0 процесс может блокироваться до тех пор, пока функция не будет вы- полнена. Параметр msgtyp задает правила выбора сообщения из очереди. При нулевом значении параметра из очереди извлекается самое старое сообщение любого типа. Положительное значение определяет прием самого старого сооб- щения указанного типа. Удаление очереди из системы производится при вызове функции int msgctl(int msgid, int cmd, struct msgbuf *msgp); при значении параметра cmd равном IPC_RMID ,третий параметр при этом ус- танавливается в значение NULL. Рассмотрим две программы. Первая будет выполнять роль сервера. Она создает очередь сообщений и посылает второй программе – клиенту строку вве- денного с клавиатуры текста. Для предварительного формирования сообщения создается структура buf по шаблону mybuf. По запросу с клавиатуры водится строка текста (строка text). Далее формируется ключ. Исходной строкой для формирования ключа служит имя файла с текстом программы "smess.c". Очередь сообщений созда- ется по полученному ранее ключу с правами доступа для пользователя на чтение и запись, для остальных разрешено только чтение из очереди. После создания очереди сообщений в буфер записывается текст введенно- го ранее сообщения и устанавливается тип сообщения. Далее сервер пересылает сформированное сообщение клиенту и завершает работу. Трансляция сервера производится по командной строке cc smess.c –o smess. В результате компиляции и компоновки формирует- ся исполняемый файл smess. /* Сервер работы с сообщениями */ #include#include #include #include #include int main() { key_t key; struct mybuf { long mtype; char mtext[81]; 21
Страницы
- « первая
- ‹ предыдущая
- …
- 19
- 20
- 21
- 22
- 23
- …
- следующая ›
- последняя »