Ц Програмирање

Редови порука ПОСИКС са програмирањем на језику Ц

Редови порука ПОСИКС са програмирањем на језику Ц

ПОСИКС међупроцесна комуникација (ИПЦ)

ИПЦ се користи за продужења у реалном времену. Ови редови порука су део Линука. Ови позиви се сада користе као стандард, али можда су део савремених верзија. Ове позиве је лако имплементирати са много чистијим интерфејсом.

Редови порука ПОСИКС порука у Линуку

В редови порука у систему Линук идентификују се помоћу кључева који се добијају помоћу фток позива. Ови ПОСИКС редови порука обично користе низове имена. У Линук системима, ПОСИКС редови називају се низовима. Сматра се да ови низови почињу са /, а затим имају друге знакове.  Процеси који прате и знају име назива реда са одговарајућим правима могу да шаљу или примају поруке у и из реда. Ово ће помоћи у обављању важних функционалности.

Шта су позиви у реду ПОСИКС порука?

Редови порука ПОСИКС морају се повезати са било којом библиотеком која стварно излази. Следи неколико позива који се користе:

либрт користи опцију компајлера -лрт

Имена позива почињу са мк_префик

Детаљи позива у реду се разматрају у наставку:

>> мк_опен, мк_цлосе

Ова функција се користи за отварање ПОСИКС реда.

Мк_опен је функција која се користи за позивање имена реда. Следећи параметар је заставица која се користи за пријем порука. О_ВРОНЛИ се користи за слање порука, а О_РДВР за слање и примање операција унутар реда. Корисници могу да користе заставицу О_НОНБЛОЦК да одреде ред у режим који не блокира и мк_сенд и мк_рецеиве за слање и примање података у реду.

Синтакса
Синтакса за горњи позив у реду приказана је испод:

#инцлуде
/ * користи се за отварање датотека * /
#инцлуде
/ * за одређивање датотеке на основу путање * /
#инцлуде
/ * да укључује описе реда порука * /
мкд_т мк_опен (цонст знак * име, инт офлаг);
/ * за отварање и приступ реду * /
мкд_т мк_опен (цонст знак * име, инт офлаг, моде_т моде,
струцт мк_аттрибуте * атрибут);

Мк_Флагс: Може бити О или неблокирано

Мк_МакМсг: Максималан број порука које се могу унети унутар реда

Мк_Мсгсизе: Максималан број бајтова у поруци

Мк_ЦурМсгс: Тренутно послате поруке у реду

мк_цлосе позиви: За затварање свих дескриптора реда.

мк_нотифи

То је позив који се користи за регистрацију и одјаву обавештења о доласку када порука уђе у празан ред.

Синтакса

#инцлуде
/ * да уврсти све описе реда порука из кода * /
инт мк_нотифи (мкд_т мкдес, цонст струцт сигевент * севп);
/ * да обавести долазак поруке у реду * /

мк_унлинк

Користи се за уклањање реда који има име_реда.

Синтакса

инт мк_унлинк (цонст цхар * име_реда);
/ * Уклањање реда који има име као име_реда * /

мк_гетаттр, мк_сетаттр

Ова функција има структуру атрибута:

струцт мк_аттр се користи као ред порука за дескрипторе.

мк_сетаттр се користи за постављање атрибута унутар реда.

Синтакса

#инцлуде
инт мк_гетаттрибуте (мкд_т мкдес, струцт мк_аттрибуте * атрибут);
инт мк_сетаттрибуте (мкд_т мкдес, цонст струцт мк_аттрибуте * неваттрибуте,
струцт мк_аттрибуте * олдаттр);

Пример: Комуникација клијент-сервер путем ПОСИКС-а

Следи пример извођења комуникације клијент-сервер путем редова порука ПОСИКС. У примеру ћемо имати датотеку клијента и датотеку сервера.

Имаћемо две датотеке: прва датотека (сервера) је сервер.ц, а друга датотека (клијента) је клијент.ц.

Сервер код

Слика приказана испод приказује код који смо користили за комуникацију клијент-сервер. Прво смо позвали неке библиотеке да дефинишемо низове, променљиве и функције. Затим смо дефинисали фцнтл функција и име сервера редова. Након тога, дефинисали смо име реда сервера, праћено величином поруке и величином међуспремника, како бисмо дефинисали величину порука како би одговарале нашем баферу у исто време. Затим смо позвали и описали редове, а затим смо генерисали следеће токене да бисмо видели одговор клијента након што је послан клијенту. Коначно, потврда је завршена штампањем поруке са краја сервера. У следећем одељку видећете заставе о којима је било речи у претходном одељку.

Иницирали смо све заставице, укључујући мк_флагс, мк_макмсгс, итд. да бисте наставили са чувањем захтева. Затим смо применили услов на име сервера и сачували поруке у баферу редова. Након овога, у време складиштења, осигурали смо да су редови следили правило приоритета засновано на првом доласку. На крају, код приказује поруку о грешци ако постоје грешке примљене од клијентског краја. Коначно, изашли смо из сервера да бисмо послали захтев клијенту.

Сачувајте сервер.ц датотека

Шифра клијента

Сада ћемо разговарати о другом досијеу. Слика приказана испод је код који смо користили за комуникацију клијент-сервер. Код је започео позивањем стандардних библиотека и дефинисањем заглавља променљивих. Затим смо дефинисали низове и све врсте података. Након тога, прогласили смо заглавље реда да бисмо дефинисали име реда сервера. Затим смо дефинисали редове за дозволе и величину поруке унутар реда, заједно са величином ме успремника за поруке (максимална величина која може стати у ред).

Описаћемо редове и створићемо новог клијента за примање порука послатих са краја сервера. Затим ћемо позвати заставице и иницијализовати их и позвати функцију крај клијента. Изаћи ће из функције у случају грешке. Вредност се чува у међуспремнику, а одговор на захтев се шаље серверу. У случају одговора, сервер ће тада пружити токен, који се штампа након што је крај клијента ушао у улаз. У случају грешке, вратиће вредности грешке, тј.е., клијент није могао да пошаље поруку серверу. После тога ћемо изаћи из клијента.

Сачувајте клијента.ц датотека

Извршење датотека

Користимо а гцц компајлер за извршавање датотека. Да бисте покренули завршну датотеку сервера, откуцајте додату наредбу у прозору терминала:

$ судо гцц сервер.ц -лрт

Затим откуцајте следеће:

$ ./ а.напоље

Излаз ће се појавити на следећи начин:

Прелазећи на одговор клијента, откуцајте следеће:

$ судо гцц клијент.ц -лрт

Затим покрените следеће:

$ ./ а.напоље

Излаз ће се појавити на следећи начин:

Закључак

У овом чланку сте научили како да шаљете редове порука ПОСИКС са Ц програмирањем, као и неке од његових функција. Затим сте детаљније видели неке примере овог процеса.

Бесплатни и отворени кодни покретачки програми за развој Линук игара
Овај чланак ће обухватити листу бесплатних покретача игара отвореног кода који се могу користити за развој 2Д и 3Д игара на Линуку. Бројни су такви мо...
Водич за сенку Томб Раидера за Линук
Схадов оф тхе Томб Раидер је дванаести додатак серији Томб Раидер - акцијско-авантуристичкој игри коју је створио Еидос Монтреал. И критичари и фанови...
Како појачати ФПС у Линуку?
ФПС је скраћеница за Фрејмова у секунди. Задатак ФПС-а је да мери брзину кадрова у репродукцијама видео записа или играчким перформансама. Једноставни...