C Programiranje

Čakalne vrste sporočil POSIX s programiranjem C

Čakalne vrste sporočil POSIX s programiranjem C

POSIX medprocesna komunikacija (IPC)

IPC se uporablja za razširitve v realnem času. Te čakalne vrste so del Linuxa. Ti klici se zdaj uporabljajo kot standard, vendar so morda del sodobnih različic. Te klice je enostavno izvajati s precej čistejšim vmesnikom.

Čakalne vrste sporočil POSIX v Linuxu

V čakalne vrste sporočil v sistemu Linux se prepoznajo s pomočjo ključev, dobljenih z uporabo ftok klici. Te čakalne vrste sporočil POSIX običajno uporabljajo imenske nize. V sistemih Linux se vrste POSIX imenujejo nizi. Šteje se, da se ti nizi začnejo z / in imajo nato druge znake.  Procesi, ki sledijo in poznajo ime imena čakalne vrste z ustreznimi pravicami, lahko pošiljajo ali prejemajo sporočila v čakalno vrsto in iz nje. To bo pomagalo pri izvajanju pomembnih funkcij.

Kaj so klici v vrsti za sporočila POSIX?

Čakalne vrste sporočil POSIX se morajo povezati s katero koli knjižnico, ki dejansko izstopi. Sledi nekaj uporabljenih klicev:

librt uporablja možnost prevajalnika -lrt

Imena klicev se začnejo s predpono mq_prefix

Podrobnosti o klicih v čakalni vrsti so opisane spodaj:

>> mq_open, mq_close

Ta funkcija se uporablja za odpiranje čakalne vrste POSIX.

Mq_open je funkcija, ki se uporablja za klicanje imena čakalne vrste. Naslednji parameter je zastavica, ki se uporablja za sprejemanje sporočil. O_WRONLY se uporablja za pošiljanje sporočil, O_RDWR pa za pošiljanje in sprejemanje operacij v čakalni vrsti. Uporabniki lahko z zastavico O_NONBLOCK določijo čakalno vrsto v način brez blokiranja in mq_send in mq_prejemi za pošiljanje in prejemanje podatkov v čakalni vrsti.

Sintaksa
Sintaksa za zgornji klic v čakalni vrsti je prikazana spodaj:

#include
/ * uporablja se za odpiranje datotek * /
#include
/ * za določitev datoteke na podlagi poti * /
#include
/ * za vključitev opisov čakalne vrste sporočil * /
mqd_t mq_open (znak const * ime, int oflag);
/ * za odpiranje in dostop do čakalne vrste * /
mqd_t mq_open (ime const *, ime int, način_t,
struct mq_attribute * atribut);

Mq_Flags: Lahko je O ali neblokiran

Mq_MaxMsg: Največje število sporočil, ki jih je mogoče vnesti v čakalno vrsto

Mq_Msgsize: Največje število bajtov v sporočilu

Mq_CurMsgs: Trenutno poslana sporočila v čakalni vrsti

mq_close klice: Za zapiranje vseh deskriptorjev čakalne vrste.

mq_notify

To je klic, ki se uporablja za registracijo in odjavo obvestila o prihodu, ko sporočilo vstopi v prazno vrsto.

Sintaksa

#include
/ * za vključitev vseh opisov čakalne vrste sporočil iz kode * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * za obvestilo o prihodu sporočila v čakalni vrsti * /

mq_unlink

Uporablja se za odstranitev čakalne vrste z imenom_ čakalne vrste.

Sintaksa

int mq_unlink (const char * ime_v čakalni vrsti);
/ * Odstranitev vrste, ki ima ime kot ime_ čakalne vrste * /

mq_getattr, mq_setattr

Ta funkcija ima strukturo atributov:

struct mq_attr se uporablja kot vrsta sporočil za deskriptorje.

mq_setattr se uporablja za nastavitev atributov v čakalni vrsti.

Sintaksa

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

Primer: Komunikacija odjemalec-strežnik prek POSIX-a

Sledi primer izvajanja komunikacije med odjemalcem in strežnikom prek čakalnih vrst sporočil POSIX. V primeru bomo imeli datoteko odjemalca in datoteko strežnika.

Imeli bomo dve datoteki: prva (strežniška) datoteka je strežnik.c, in druga (odjemalska) datoteka je stranka.c.

Koda strežnika

Spodnja slika prikazuje kodo, ki smo jo uporabili za komunikacijo odjemalec-strežnik. Najprej smo poklicali nekaj knjižnic za definiranje nizov, spremenljivk in funkcij. Nato smo definirali fcntl funkcijo in ime strežnika čakalne vrste. Po tem smo definirali ime čakalne vrste strežnika, ki ji je sledila velikost sporočil in velikost vmesnega pomnilnika, da določimo velikost sporočil, ki ustrezajo vmesnemu pomnilniku. Nato smo poklicali in opisali čakalne vrste, nato smo ustvarili naslednje žetone, da smo videli odziv odjemalca, ko je bil poslan odjemalcu. Končno je bila potrditev zaključena s tiskanjem sporočila s konca strežnika. V naslednjem poglavju boste videli zastavice, o katerih smo razpravljali v prejšnjem poglavju.

Inicializirali smo vse zastavice, vključno z mq_flags, mq_maxmsgs, itd. za nadaljevanje shranjevanja zahtev. Nato smo pogoj uporabili za ime strežnika in sporočila shranili v medpomnilnik čakalne vrste. Po tem smo v času shranjevanja zagotovili, da so čakalne vrste sledile pravilu prioritete, ki temelji na prvem prispevku. Na koncu koda prikaže sporočilo o napaki, če pride do napak s konca odjemalca. Nazadnje smo zapustili strežnik in stranki poslali zahtevo.

Shranite strežnik.c datoteko

Koda stranke

Zdaj bomo razpravljali o drugi datoteki. Spodnja slika je koda, ki smo jo uporabili za komunikacijo odjemalec-strežnik. Koda se je začela s klicem standardnih knjižnic in definiranjem glav spremenljivk. Nato smo definirali nize in vse vrste podatkov. Po tem smo razglasili glavo čakalne vrste za določitev imena strežniške vrste. Nato smo določili čakalne vrste dovoljenj in velikost sporočil znotraj čakalne vrste, skupaj z velikostjo vmesnega pomnilnika sporočil (največja velikost, ki bi lahko ustrezala vrsti).

Opisali bomo čakalne vrste in ustvarili novega odjemalca za sprejemanje sporočil, poslanih s konca strežnika. Nato bomo poklicali zastavice in jih inicializirali ter poklicali funkcijo konca odjemalca. V primeru napake bo funkcijo zapustil. Vrednost je shranjena v medpomnilniku in odgovor na zahtevo se pošlje strežniku. V primeru odziva bo strežnik nato zagotovil žeton, ki se natisne, ko končni odjemalec vnese vnos. V primeru napake bo vrnil vrednosti napake, tj.e., odjemalec ni mogel poslati sporočila strežniku. Po tem bomo zapustili stranko.

Shrani stranko.c datoteko

Izvajanje datotek

Uporabljamo gcc prevajalnik za izvajanje datotek. Če želite zagnati končno datoteko strežnika, vnesite dodani ukaz v okno terminala:

$ sudo gcc strežnik.c -lrt

Nato vnesite naslednje:

$ ./ a.ven

Izhod se bo prikazal na naslednji način:

Če nadaljujete do odziva stranke, vnesite naslednje:

$ sudo gcc odjemalec.c -lrt

Nato zaženite naslednje:

$ ./ a.ven

Izhod se bo prikazal na naslednji način:

Zaključek

V tem članku ste se naučili pošiljanja čakalnih vrst sporočil POSIX s programiranjem C in nekaterih njegovih funkcij. Nato ste podrobneje videli nekaj primerov tega postopka.

S pomočjo gumba X-Mouse Button Control različno prilagodite gumbe miške za različno programsko opremo
Mogoče potrebujete orodje, ki bi lahko spremenilo nadzor miške z vsako aplikacijo, ki jo uporabljate. V tem primeru lahko preizkusite aplikacijo z ime...
Microsoft Sculpt Touch Wireless Mouse Review
Pred kratkim sem prebral o Microsoftov kiparski dotik brezžično miško in se odločil za nakup. Potem ko sem ga nekaj časa uporabljal, sem se odločil, d...
Zaslonska sledilna ploščica in kazalec miške AppyMouse za tablične računalnike Windows
Uporabniki tabličnih računalnikov pogosto zgrešijo miškin kazalec, še posebej kadar običajno uporabljajo prenosne računalnike. Pametni telefoni in tab...