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 -lrtMená 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:
/ * 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
#includeint 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.