Работа с интерфейсом прикладного программирования операционной системы Linux. Шашков Б.Д. - 21 стр.

UptoLike

Составители: 

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