C programavimas

POSIX pranešimų eilės su C programavimu

POSIX pranešimų eilės su C programavimu

„POSIX“ procesų komunikacija (IPC)

IPC naudojamas plėtiniams realiuoju laiku. Šios pranešimų eilės yra „Linux“ dalis. Šie skambučiai dabar naudojami kaip standartas, tačiau gali būti šiuolaikinių versijų dalis. Šiuos skambučius lengva įgyvendinti naudojant daug švaresnę sąsają.

„POSIX“ pranešimų eilės sistemoje „Linux“

V pranešimų eilės „Linux“ sistemoje nustatomos naudojant raktus, gautus naudojant ftok skambučių. Šiose POSIX pranešimų eilėse paprastai naudojamos vardų eilutės. „Linux“ sistemose POSIX eilės vadinamos eilutėmis. Laikoma, kad šios eilutės prasideda / ir tada turi kitus simbolius.  Procesai, kurie seka ir žino eilės pavadinimą su atitinkamomis teisėmis, gali siųsti arba gauti pranešimus į eilę ir iš jos. Tai padės atlikti svarbias funkcijas.

Kas yra „POSIX“ pranešimų eilės skambučiai?

POSIX pranešimų eilės turi būti susietos su bet kuria biblioteka, kuri išeina iš tikrųjų. Toliau pateikiami keli naudojami skambučiai:

librt naudoja kompiliatoriaus parinktį -lrt

Skambučių pavadinimai prasideda „mq_prefix“

Išsami informacija apie skambučius eilėje aptariama toliau:

>> mq_open, mq_close

Ši funkcija naudojama norint atidaryti POSIX eilę.

„Mq_open“ yra funkcija, naudojama eilės pavadinimui iškviesti. Kitas parametras yra vėliava, naudojama pranešimams gauti. O_WRONLY naudojamas pranešimams siųsti, o O_RDWR naudojamas operacijoms eilėje siųsti ir gauti. Vartotojai gali naudoti vėliavą O_NONBLOCK, norėdami nurodyti eilę į neblokavimo režimą ir mq_send ir mq_receive siųsti ir gauti duomenis eilėje.

Sintaksė
Pirmiau pateikiama aukščiau nurodyto eilės skambučio sintaksė:

# įtraukti
/ * naudojamas failams atidaryti * /
# įtraukti
/ * nustatyti failą pagal kelią * /
# įtraukti
/ * įtraukti pranešimų eilių aprašymus * /
mqd_t mq_open (const simbolis * vardas, int oflag);
/ * atidaryti ir patekti į eilę * /
mqd_t mq_open (konst. simbolio * vardas, int oflag, mode_t režimas,
struct mq_attribute * atributas);

Mq_Flags: Gali būti O arba neblokuotas

Mq_MaxMsg: Didžiausias pranešimų, kuriuos galima įvesti eilėje, skaičius

Mq_Msgsize: Maksimalus baitų skaičius pranešime

Mq_CurMsgs: Šiuo metu išsiųsti pranešimai eilėje

mq_close skambučiai: Uždaryti visus eilės aprašus.

mq_notify

Tai skambutis, naudojamas registruoti ir išregistruoti atvykimo pranešimą, kai pranešimas patenka į tuščią eilę.

Sintaksė

# įtraukti
/ * įtraukti visus pranešimų eilių aprašus iš kodo * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * pranešti apie pranešimo atvykimą į eilę * /

mq_unlink

Jis naudojamas norint pašalinti eilę su eilės_pavadinimu.

Sintaksė

int mq_unlink (const char * queue_name);
/ * Norėdami pašalinti eilę, kurios vardas yra eilės_pavadinimas * /

mq_getattr, mq_setattr

Ši funkcija turi atributų struktūrą:

struct mq_attr naudojamas kaip pranešimų eilė aprašams.

„mq_setattr“ naudojamas nustatant atributus eilėje.

Sintaksė

# įtraukti
int mq_getattribute (mqd_t mqdes, struct mq_attribute * atributas);
int mq_setattribute (mqd_t mqdes, const struct mq_attribute * newattribute,
struct mq_attribute * oldattr);

Pavyzdys: Kliento ir serverio ryšys per POSIX

Toliau pateiktas kliento ir serverio ryšio per POSIX pranešimų eiles pavyzdys. Pavyzdyje turėsime kliento failą ir serverio failą.

Turėsime du failus: pirmasis (serverio) failas yra serverio.c, o kitas (kliento) failas yra klientas.c.

Serverio kodas

Žemiau pateiktame paveikslėlyje parodytas kodas, kurį naudojome ryšiui su klientu ir serveriu. Pirma, mes paskambinome į kai kurias bibliotekas, kad apibrėžtume eilutes, kintamuosius ir funkcijas. Tada mes apibrėžėme fcntl funkciją ir eilės serverio pavadinimą. Po to mes nustatėme serverio eilės pavadinimą, po jo pranešimo dydį ir buferio dydį, kad nustatytume pranešimų dydį, kad jie atitiktų mūsų buferį vienu metu. Tada paskambinome ir aprašėme eiles, tada sugeneravome kitus prieigos raktus, kad pamatytume kliento atsakymą, kai tik jis buvo išsiųstas klientui. Galiausiai patvirtinimas buvo baigtas atspausdinus pranešimą iš serverio pabaigos. Kitame skyriuje pamatysite vėliavėles, aptartas ankstesniame skyriuje.

Inicijavome visas vėliavas, įskaitant mq_flags, mq_maxmsgs, ir pan. tęsti prašymų saugojimą. Tada sąlygą pritaikėme serverio pavadinimui ir pranešimus išsaugojome eilės buferyje. Po to, saugojimo metu, mes užtikrinome, kad eilės atitiktų pirmumo principą. Pabaigoje kodas rodo klaidos pranešimą, jei yra klaidų, gautų iš kliento pabaigos. Galiausiai išėjome iš serverio, kad išsiųstume užklausą klientui.

Išsaugokite serverį.c failą

Kliento kodas

Dabar aptarsime antrąjį failą. Žemiau pateiktas vaizdas yra kodas, kurį naudojome kliento ir serverio ryšiui palaikyti. Kodas prasidėjo skambinant standartinėms bibliotekoms ir apibrėžiant kintamas antraštes. Tada mes apibrėžėme eilutes ir visų tipų duomenis. Po to mes paskelbėme eilės antraštę, kad apibrėžtume serverio eilės pavadinimą. Toliau mes nustatėme leidimų eiles ir pranešimo dydį eilėje kartu su pranešimo buferio dydžiu (didžiausiu dydžiu, kuris gali tilpti eilėje).

Aprašysime eiles ir sukursime naują klientą, kad gautumėte iš serverio galo išsiųstus pranešimus. Tada iškviesime vėliavas, jas inicializuosime ir iškviesime kliento pabaigos funkciją. Klaidos atveju ji išeis iš funkcijos. Vertė saugoma buferio viduje, o užklausos atsakymas siunčiamas į serverį. Atsakymo atveju serveris pateiks prieigos raktą, kuris bus atspausdintas, kai kliento galas įves įvestį. Jei įvyko klaida, ji grąžins klaidos reikšmes, t.e., klientas negalėjo išsiųsti pranešimo į serverį. Po to mes išeisime iš kliento.

Išsaugokite klientą.c failą

Failų vykdymas

Mes naudojame a gcc kompiliatorius vykdyti failus. Norėdami paleisti serverio pabaigos failą, terminalo lange įveskite pridėtą komandą:

$ sudo gcc serveris.c -lrt

Tada įveskite:

$ ./ a.išėjo

Rezultatas pasirodys taip:

Pereinant prie kliento atsakymo, įveskite:

$ sudo gcc klientas.c -lrt

Tada paleiskite šiuos veiksmus:

$ ./ a.išėjo

Rezultatas pasirodys taip:

Išvada

Šiame straipsnyje jūs sužinojote, kaip siųsti POSIX pranešimų eiles su C programavimu, taip pat kai kurias jo funkcijas. Tada jūs pamatėte keletą šio proceso pavyzdžių išsamiau.

Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...
„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...