C Programmeerimine

C-programmeerimisega POSIX-i sõnumijärjekorrad

C-programmeerimisega POSIX-i sõnumijärjekorrad

POSIXi protsessidevaheline suhtlus (IPC)

IPC-d kasutatakse reaalajas laienduste jaoks. Need sõnumijärjekorrad on osa Linuxist. Neid kõnesid kasutatakse praegu standardina, kuid need võivad olla kaasaegsete versioonide osa. Neid kõnesid on palju puhtama liidesega lihtne teostada.

POSIXi sõnumijärjekorrad Linuxis

V-sõnumite järjekorrad Linuxi süsteemis tuvastatakse võtmete abil, mis on saadud kasutades ftok kõned. Need POSIX-i sõnumijärjekorrad kasutavad tavaliselt nimistringe. Linuxi süsteemides nimetatakse POSIX-i järjekordi stringideks. Neid stringe loetakse algavaks tähtedega / ja neil on siis teised märgid.  Protsessid, mis järgivad ja teavad vastavate õigustega järjekorra nime, saavad saata või vastu võtta sõnumeid järjekorda ja tagasi. See aitab täita olulisi funktsioone.

Mis on POSIX-i sõnumijärjekorra kõned?

POSIX-i sõnumijärjekorrad peavad olema seotud kõigi teekidega, mis väljuvad päriselt. Siin on mõned kasutatavad kõned:

librt kasutab kompilaatori valikut -lrt

Kõnede nimed algavad mq_prefix

Järjekõnede üksikasju arutatakse allpool:

>> mq_open, mq_close

Seda funktsiooni kasutatakse POSIX-järjekorra avamiseks.

Mq_open on funktsioon, mida kasutatakse järjekorra nime kutsumiseks. Järgmine parameeter on lipp, mida kasutatakse sõnumite vastuvõtmiseks. O_WRONLY kasutatakse sõnumite saatmiseks ja O_RDWR kasutatakse järjekorras toimingute saatmiseks ja vastuvõtmiseks. Kasutajad saavad lipu O_NONBLOCK abil määrata blokeerimiseta režiimi järjekorra ja mq_send ja mq_receive andmete järjekorras saatmiseks ja vastuvõtmiseks.

Süntaks
Allpool kuvatakse ülaltoodud järjekorrakõne süntaks:

# kaasata
/ * kasutatakse failide avamiseks * /
# kaasata
/ * faili määramiseks tee põhjal * /
# kaasata
/ * sõnumijärjekirjelduste lisamiseks * /
mqd_t mq_open (const märk * nimi, int oflag);
/ * järjekorra avamiseks ja juurdepääsuks * /
mqd_t mq_open (const märk * nimi, int oflag, mode_t režiim,
struct mq_attribute * atribuut);

Mq_Lipud: Võib olla O või blokeerimata

Mq_MaxMsg: Maksimaalne järjekorra sisestatavate sõnumite arv

Mq_Msgsize: Maksimaalne baitide arv sõnumis

Mq_CurMsgs: Praegu saadetud sõnumid järjekorras

mq_close kõned: Sulgeda kõik järjekorra kirjeldajad.

mq_notify

See on kõne, mida kasutatakse saabumisteate registreerimiseks ja registreerimise tühistamiseks, kui sõnum siseneb tühja järjekorda.

Süntaks

# kaasata
/ *, et lisada koodist kõik sõnumijärjekorra kirjeldused * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * teate saabumisest järjekorda * /

mq_unlink

Seda kasutatakse järjekorra, millel on järjekorra_nimi, eemaldamiseks.

Süntaks

int mq_unlink (const char * järjekorra nimi);
/ * Selle järjekorra eemaldamiseks, mille nimi on järjekorra_nimi * /

mq_getattr, mq_setattr

Sellel funktsioonil on atribuudistruktuur:

struct mq_attr kasutatakse kirjeldajate sõnumijärjekorrana.

mq_setattr kasutatakse atribuutide seadmiseks järjekorras.

Süntaks

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

Näide: klient-server suhtlus POSIXi kaudu

Järgnev näide kliendi-serveri suhtluse teostamisest POSIX-i sõnumijärjekordade kaudu. Selles näites on meil kliendifail ja serverifail.

Meil on kaks faili: esimene (serveri) fail on server.c, ja teine ​​(kliendi) fail on klient.c.

Serveri kood

Allpool kuvatud pilt näitab koodi, mida kasutasime kliendi-serveri suhtlemiseks. Kõigepealt kutsusime stringe, muutujaid ja funktsioone määratlema mõned teegid. Seejärel määratlesime fcntl funktsioon ja järjekorra serveri nimi. Pärast seda määrasime serveri järjekorra nime, millele järgnesid selle sõnumi suurus ja puhvri suurus, et määrata sõnumite suurus, mis sobivad korraga meie puhvriga. Järgmisena helistasime ja kirjeldasime järjekordi, seejärel genereerisime järgmised märgid, et näha kliendi vastust, kui see kliendile saadeti. Lõpuks kinnitamine lõpetati sõnumi printimisega serveri lõpust. Järgmises jaotises näete eelmises jaotises käsitletud lippe.

Algatasime kõik lipud, sealhulgas mq_flags, mq_maxmsgs, jne. taotluste salvestamise jätkamiseks. Seejärel rakendasime tingimuse serveri nimele ja salvestasime sõnumid järjekorra puhvrisse. Pärast seda tagasime salvestamise ajal, et järjekorrad järgiksid eesõigul põhinevat prioriteedireeglit. Lõpus kuvab kood tõrketeate, kui kliendilõpult on saadud vigu. Lõpuks väljusime serverist, et kliendile päring saata.

Salvestage server.c fail

Kliendi kood

Nüüd arutame teist faili. Allpool kuvatud pilt on kood, mida kasutasime kliendi-serveri suhtlemiseks. Kood algas tavaliste teekide helistamise ja muutuvate päiste määratlemisega. Seejärel määratlesime stringid ja igat tüüpi andmed. Pärast seda kuulutasime serveri järjekorra nime määratlemiseks järjekorra päise. Järgmisena määratlesime loa järjekorrad ja sõnumi suuruse järjekorras koos sõnumipuhvri suurusega (maksimaalne suurus, mis võiks järjekorda mahtuda).

Kirjeldame järjekordi ja loome uue kliendi serveri otsast saadetud sõnumite vastuvõtmiseks. Seejärel kutsume lipud ja lähtestame need ning kutsume kliendilõpu funktsiooni. See väljub funktsioonist vea korral. Väärtus salvestatakse puhvrisse ja päringuvastus saadetakse serverile. Vastuse korral esitab server loa, mis prinditakse pärast seda, kui kliendi lõpp on sisendi sisestanud. Vea korral tagastab see vea väärtused, s.t.e., klient pole suutnud serverile sõnumit saata. Pärast seda väljume kliendist.

Salvestage klient.c fail

Failide täitmine

Kasutame a gcc kompilaator failide käivitamiseks. Serveri lõppfaili käivitamiseks tippige terminaliaknasse lisatud käsk:

$ sudo gcc-server.c -lrt

Järgmisena tippige järgmine:

$ ./ a.välja

Väljund kuvatakse järgmiselt:

Kliendi vastuse juurde liikumiseks sisestage järgmine:

$ sudo gcc klient.c -lrt

Seejärel käivitage järgmine:

$ ./ a.välja

Väljund kuvatakse järgmiselt:

Järeldus

Selles artiklis õppisite, kuidas saata C-programmeerimisega POSIXi sõnumijärjekordi, samuti mõningaid selle funktsioone. Seejärel nägite selle protsessi mõningaid näiteid üksikasjalikumalt.

WinMouse võimaldab teil kohandada ja parandada hiirekursori liikumist Windowsi arvutis
Kui soovite oma hiirekursori vaikefunktsioone paremaks muuta, kasutage vabavara WinMouse. See lisab rohkem funktsioone, mis aitavad teil alandlikust h...
Hiire vasakklõps nupp ei tööta Windows 10-s
Kui kasutate oma sülearvuti või lauaarvutiga spetsiaalset hiirt, kuid hiire vasakklõps nupp ei tööta mingil põhjusel operatsioonisüsteemis Windows 10/...
Kursor hüppab või liigub juhuslikult Windows 10-s kirjutamise ajal
Kui leiate, et hiire kursor hüppab või liigub Windowsi sülearvutisse või arvutisse kirjutades automaatselt, juhuslikult, võivad mõned neist soovituste...