C Програмиране

Опашки за съобщения POSIX с програмиране на C

Опашки за съобщения POSIX с програмиране на C

POSIX междупроцесната комуникация (IPC)

IPC се използва за разширения в реално време. Тези опашки за съобщения са част от Linux. Тези обаждания се използват като стандарт сега, но може да са част от съвременните версии. Тези повиквания са лесни за изпълнение с много по-изчистен интерфейс.

Опашки за съобщения POSIX в Linux

V опашките за съобщения в система Linux се идентифицират с помощта на ключове, получени с помощта ftok обаждания. Тези опашки за съобщения POSIX обикновено използват низове на имена. В Linux системи опашките POSIX се наричат ​​низове. Счита се, че тези низове започват с / и след това имат други знаци.  Процесите, които следват и знаят името на името на опашката с подходящи права, могат да изпращат или получават съобщения до и от опашката. Това ще помогне при изпълнението на важни функционалности.

Какво представляват повикванията в опашката за съобщения POSIX?

Опашките за съобщения POSIX трябва да се свързват с всяка библиотека, която излиза реално. Следват няколко използвани повиквания:

librt използва опцията на компилатора -lrt

Имената на повикванията започват с mq_prefix

Подробностите за повикванията в опашката са обсъдени по-долу:

>> mq_open, mq_close

Тази функция се използва за отваряне на опашка POSIX.

Mq_open е функция, която се използва за извикване на името на опашката. Следващият параметър е флаг, използван за получаване на съобщенията. O_WRONLY се използва за изпращане на съобщения, а O_RDWR се използва за изпращане и получаване на операции в опашката. Потребителите могат да използват флага O_NONBLOCK, за да посочат опашката в режим на неблокиране и mq_send и mq_receive за изпращане и получаване на данни на опашка.

Синтаксис
Синтаксисът за горното извикване на опашка е показан по-долу:

#include
/ * използва се за отваряне на файловете * /
#include
/ * за определяне на файл въз основа на пътя * /
#include
/ * да включва описания на опашките за съобщения * /
mqd_t mq_open (const символ * име, int oflag);
/ * за отваряне и достъп до опашката * /
mqd_t mq_open (const character * name, int oflag, mode_t mode,
struct mq_attribute * attribute);

Mq_Flags: Може да е O или неблокиран

Mq_MaxMsg: Максимален брой съобщения, които могат да бъдат въведени в опашката

Mq_Msgsize: Максимален брой байтове в съобщението

Mq_CurMsgs: Понастоящем изпратени съобщения в опашката

mq_close разговори: За да затворите всички дескриптори на опашката.

mq_notify

Това е повикване, използвано за регистриране и отписване на известие за пристигане, когато съобщението влиза в празна опашка.

Синтаксис

#include
/ * да включва всички описания на опашката за съобщения от кода * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * за уведомяване за пристигането на съобщението на опашка * /

mq_unlink

Използва се за премахване на опашката с име_на опашка.

Синтаксис

int mq_unlink (const char * queue_name);
/ * За премахване на опашката с име като queue_name * /

mq_getattr, mq_setattr

Тази функция има структура на атрибути:

struct mq_attr се използва като опашка за съобщения за дескриптори.

mq_setattr се използва за задаване на атрибутите в опашката.

Синтаксис

#include
int mq_getattribute (mqd_t mqdes, struct mq_attribute * атрибут);
int mq_setattribute (mqd_t mqdes, const struct mq_attribute * newattribute,
struct mq_attribute * oldattr);

Пример: Комуникация клиент-сървър чрез POSIX

Следва пример за извършване на комуникация клиент-сървър чрез опашки за съобщения POSIX. В примера ще имаме клиентски файл и файл на сървъра.

Ще имаме два файла: първият (сървър) файл е сървър.° С, а другият (клиентски) файл е клиент.° С.

Код на сървъра

Показаното изображение по-долу показва кода, който използвахме за комуникация клиент-сървър. Първо, извикахме някои библиотеки, за да дефинираме низовете, променливите и функциите. След това дефинирахме fcntl функция и името на сървъра на опашката. След това дефинирахме името на опашката на сървъра, последвано от размера на съобщението и размера на буфера, за да определим размера на съобщенията, за да се побере нашия буфер в даден момент. След това извикахме и описахме опашките, след което генерирахме следващите маркери, за да видим отговора на клиента, след като беше изпратен на клиента. И накрая, потвърждението беше завършено чрез отпечатване на съобщението от края на сървъра. В следващия раздел ще видите флаговете, обсъдени в предишния раздел.

Инициализирахме всички флагове, включително mq_flags, mq_maxmsgs, и т.н. за да продължите със съхраняването на заявки. След това приложихме условието към името на сървъра и съхранихме съобщенията в буфера на опашката. След това, по време на съхранението, ние гарантираме, че опашките следват правило за приоритет, базирано на първи дошъл. В края кодът показва съобщение за грешка, ако има грешки, получени от края на клиента. Накрая излязохме от сървъра, за да изпратим заявката до клиента.

Запазете сървъра.c файл

Код на клиента

Сега ще обсъдим втория файл. Показаното изображение по-долу е кодът, който използвахме за комуникация клиент-сървър. Кодът започна с извикване на стандартни библиотеки и дефиниране на заглавки на променливи. След това дефинирахме низовете и всички видове данни. След това декларирахме заглавката на опашката, за да дефинираме името на опашката на сървъра. След това дефинирахме опашките за разрешение и размера на съобщението вътре в опашката, заедно с размера на буфера за съобщения (максималният размер, който може да се побере в опашката).

Ще опишем опашките и ще създадем нов клиент за получаване на съобщенията, изпратени от края на сървъра. След това ще извикаме флаговете и ще ги инициализираме и ще извикаме функцията за край на клиента. Той ще излезе от функцията в случай на грешка. Стойността се съхранява в буфера и отговор на заявка се изпраща до сървъра. В случай на отговор, сървърът ще предостави маркера, който се отпечатва, след като клиентският край е въвел входа. В случай на грешка, тя ще върне стойностите на грешката, т.е.д., клиентът не е успял да изпрати съобщение до сървъра. След това ще излезем от клиента.

Запазете клиента.c файл

Изпълнение на файловете

Използваме a gcc компилатор за изпълнение на файловете. За да стартирате крайния файл на сървъра, въведете добавената команда в прозореца на терминала:

$ sudo gcc сървър.c -lrt

След това въведете следното:

$ ./ а.навън

Резултатът ще се появи, както следва:

Преминавайки към отговора на клиента, въведете следното:

$ sudo gcc клиент.c -lrt

След това изпълнете следното:

$ ./ а.навън

Резултатът ще се появи, както следва:

Заключение

В тази статия научихте как да изпращате опашки за съобщения POSIX с програмиране на C, както и някои от неговите функции. След това видяхте няколко примера за този процес по-подробно.

Пристанища с отворен код на търговски игрални машини
Безплатни разширения на играта с отворен код и междуплатформени игри могат да се използват за възпроизвеждане на стари, както и някои от доста скорошн...
Най-добрите игри за команден ред за Linux
Командният ред не е само най-големият ви съюзник при използване на Linux - той може да бъде и източник на забавление, защото можете да го използвате, ...
Най-добрите приложения за картографиране на геймпад за Linux
Ако искате да играете игри на Linux с геймпад вместо типична система за въвеждане на клавиатура и мишка, има някои полезни приложения за вас. Много ко...