C Programovanie

Fronty správ POSIX s programovaním C

Fronty správ POSIX s programovaním C

Medziprocesová komunikácia POSIX (IPC)

IPC sa používa na rozšírenia v reálnom čase. Tieto fronty správ sú súčasťou systému Linux. Tieto hovory sa v súčasnosti používajú ako štandard, ale môžu byť súčasťou súčasných verzií. Tieto hovory sa dajú ľahko implementovať pomocou oveľa čistejšieho rozhrania.

Fronty správ POSIX v systéme Linux

Fronty správ V v systéme Linux sú identifikované pomocou kľúčov, ktoré sa získavajú pomocou ftok hovory. Tieto fronty správ POSIX zvyčajne používajú reťazce mien. V systémoch Linux sa fronty POSIX nazývajú reťazce. Tieto reťazce sa považujú za začiatok znakom / a potom majú ďalšie znaky.  Procesy, ktoré sledujú a poznajú názov frontu s príslušnými právami, môžu odosielať alebo prijímať správy do a z frontu. To pomôže pri vykonávaní dôležitých funkcií.

Čo sú hovory z frontu správ POSIX?

Fronty správ POSIX musia byť prepojené s každou knižnicou, ktorá končí naozaj. Nasleduje niekoľko používaných hovorov:

librt používa voľbu kompilátora -lrt

Mená hovorov sa začínajú mq_prefix

Podrobnosti o hovoroch vo fronte sú uvedené nižšie:

>> mq_open, mq_close

Táto funkcia sa používa na otvorenie frontu POSIX.

Mq_open je funkcia, ktorá sa používa na volanie názvu frontu. Ďalším parametrom je príznak používaný na príjem správ. O_WRONLY sa používa na odosielanie správ a O_RDWR sa používa na odosielanie a prijímanie operácií vo fronte. Používatelia môžu pomocou príznaku O_NONBLOCK určiť poradie do neblokujúceho režimu a mq_send a mq_receive na odosielanie a prijímanie údajov vo fronte.

Syntax
Syntax vyššie uvedeného volania do frontu je zobrazená nižšie:

#include
/ * slúži na otvorenie súborov * /
#include
/ * určiť súbor na základe cesty * /
#include
/ * zahrnúť popisy front správ * /
mqd_t mq_open (konštantný znak * meno, int oflag);
/ * na otvorenie a prístup do frontu * /
mqd_t mq_open (konštantný znak * meno, int oflag, mode_t mode,
struct mq_attribute * atribút);

Mq_Flags: Môže to byť O alebo neblokované

Mq_MaxMsg: Maximálny počet správ, ktoré je možné zadať do frontu

Mq_Msgsize: Maximálny počet bajtov v správe

Mq_CurMsgs: Aktuálne odoslané správy v poradí

mq_close hovory: Zatvoriť všetky deskriptory frontu.

mq_notify

Je to hovor používaný na registráciu a zrušenie registrácie oznámenia o príchode, keď správa vstúpi do prázdneho frontu.

Syntax

#include
/ * zahrnúť všetky popisy frontu správ z kódu * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * oznámiť príchod správy vo fronte * /

mq_unlink

Používa sa na odstránenie frontu, ktorý má názov_fronty.

Syntax

int mq_unlink (const char * queue_name);
/ * Odstránenie frontu s názvom queue_name * /

mq_getattr, mq_setattr

Táto funkcia má štruktúru atribútov:

struct mq_attr sa používa ako front správ pre deskriptory.

mq_setattr sa používa na nastavenie atribútov vo fronte.

Syntax

#include
int mq_getattribute (mqd_t mqdes, struct mq_attribute * atribút);
int mq_setattribute (mqd_t mqdes, const struct mq_attribute * newattribute,
struct mq_attribute * oldattr);

Príklad: Komunikácia klient-server cez POSIX

Nasleduje príklad uskutočnenia komunikácie klient-server prostredníctvom frontov správ POSIX. V príklade budeme mať klientsky súbor a serverový súbor.

Budeme mať dva súbory: prvý (serverový) súbor je server.c, a druhý (klientský) súbor je zákazník.c.

Serverový kód

Obrázok zobrazený nižšie zobrazuje kód, ktorý sme použili na komunikáciu klient-server. Najskôr sme zavolali niektoré knižnice, aby sme definovali reťazce, premenné a funkcie. Potom sme definovali fcntl funkcia a nazov frontoveho serveru. Potom sme definovali názov frontu servera, za ktorým nasledovala veľkosť jeho správ a veľkosť medzipamäte, aby sme definovali veľkosť správ, aby sa zmestili do našej medzipamäte súčasne. Ďalej sme zavolali a opísali fronty a potom sme vygenerovali ďalšie tokeny, aby sme videli odpoveď klienta hneď po jeho odoslaní klientovi. Nakoniec bolo potvrdenie dokončené vytlačením správy zo konca servera. V nasledujúcej časti uvidíte príznaky diskutované v predchádzajúcej časti.

Inicializovali sme všetky vlajky vrátane mq_flags, mq_maxmsgs, atď. pokračovať v ukladaní žiadostí. Potom sme podmienku aplikovali na názov servera a správy sme uložili do medzipamäte frontu. Potom sme v čase ukladania zaistili, aby sa fronty riadili pravidlom priority „kto skôr príde“. Na konci kód zobrazí správu o zlyhaní, ak dôjde k chybám prijatým z konca klienta. Nakoniec sme opustili server, aby sme odoslali požiadavku klientovi.

Uložte server.c súbor

Kód klienta

Teraz budeme diskutovať o druhom spise. Obrázok zobrazený nižšie je kód, ktorý sme použili na komunikáciu klient-server. Kód začal volaním štandardných knižníc a definovaním hlavičiek premenných. Potom sme definovali reťazce a všetky typy údajov. Potom sme deklarovali hlavičku frontu, aby sme definovali názov frontu servera. Ďalej sme definovali fronty povolení a veľkosť správy vo fronte spolu s veľkosťou vyrovnávacej pamäte správ (maximálna veľkosť, ktorá sa zmestila do frontu).

Popíšeme fronty a vytvoríme nového klienta na príjem správ odoslaných z konca servera. Potom zavoláme príznaky a inicializujeme ich a zavoláme funkciu na konci klienta. Funkciu ukončí v prípade chyby. Hodnota je uložená vo medzipamäti a na server sa odošle odpoveď na požiadavku. V prípade odpovede potom server poskytne token, ktorý sa vytlačí, keď klient zadá vstup. V prípade chyby vráti chybové hodnoty, t.j.e., klient nemohol poslať správu na server. Potom klienta opustíme.

Zachráňte klienta.c súbor

Spúšťanie súborov

Používame a gcc kompilátor na vykonávanie súborov. Ak chcete spustiť koncový súbor servera, zadajte pripojený príkaz do okna terminálu:

server $ sudo gcc.c -lrt

Ďalej zadajte nasledujúci text:

$ ./ a.von

Výstup sa zobrazí takto:

Prejdite na odpoveď klienta a zadajte nasledujúci text:

$ sudo gcc klient.c -lrt

Potom spustite nasledovné:

$ ./ a.von

Výstup sa zobrazí nasledovne:

Záver

V tomto článku ste sa naučili, ako posielať fronty správ POSIX pomocou programovania C, ako aj niektoré z jeho funkcií. Potom ste videli niektoré príklady tohto procesu podrobnejšie.

Hry Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
Ako zachytiť a streamovať vašu hernú reláciu v systéme Linux
V minulosti sa hranie hier považovalo iba za hobby, ale časom došlo v hernom priemysle k obrovskému nárastu z hľadiska technológie i počtu hráčov. Her...
Hry Najlepšie hry na hranie s ručným sledovaním
Najlepšie hry na hranie s ručným sledovaním
Oculus Quest nedávno predstavil skvelú myšlienku ručného sledovania bez ovládačov. Vďaka stále sa zvyšujúcemu počtu hier a aktivít, ktoré vykonávajú p...
Hry Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Ako zobraziť prekrytie OSD v linuxových aplikáciách a hrách na celú obrazovku
Hranie hier na celú obrazovku alebo používanie aplikácií v režime rozptýlenia zadarmo na celú obrazovku vás môže odrezať od relevantných systémových i...