C Ohjelmointi

POSIX-viestijonot C-ohjelmoinnilla

POSIX-viestijonot C-ohjelmoinnilla

POSIX-prosessien välinen viestintä (IPC)

IPC: tä käytetään reaaliaikaisiin laajennuksiin. Nämä viestijonot ovat osa Linuxia. Näitä puheluita käytetään nyt vakiona, mutta ne voivat olla osa nykyaikaisia ​​versioita. Nämä puhelut on helppo toteuttaa paljon puhtaammalla käyttöliittymällä.

POSIX-viestijonot Linuxissa

Linux-järjestelmän V-viestijonot tunnistetaan näppäimillä, jotka on saatu käyttämällä ftok puhelut. Nämä POSIX-viestijonot käyttävät yleensä nimimerkkijonoja. Linux-järjestelmissä POSIX-jonoja kutsutaan merkkijonoiksi. Näiden merkkijonojen katsotaan alkavan / ja niillä on sitten muita merkkejä.  Prosessit, jotka seuraavat ja tietävät jonon nimen, jolla on asianmukaiset oikeudet, voivat lähettää tai vastaanottaa viestejä jonoon ja sieltä. Tämä auttaa tärkeiden toimintojen suorittamisessa.

Mitä ovat POSIX-viestijonon puhelut?

POSIX-viestijonojen on linkitettävä mihin tahansa kirjastoon, joka poistuu aidosti. Seuraavassa on muutama käytetty puhelu:

librt käyttää kääntäjä-vaihtoehtoa -lrt

Kutsujen nimet alkavat mq_prefix

Jonopuheluiden yksityiskohtia käsitellään alla:

>> mq_open, mq_close

Tätä toimintoa käytetään POSIX-jonon avaamiseen.

Mq_open on funktio, jota käytetään jonon nimen kutsumiseen. Seuraava parametri on lippu, jota käytetään viestien vastaanottamiseen. O_WRONLY käytetään viestien lähettämiseen, ja O_RDWR käytetään jonon sisällä olevien toimintojen lähettämiseen ja vastaanottamiseen. Käyttäjät voivat käyttää O_NONBLOCK-lippua määrittelemään jonon estämättömään tilaan ja mq_send ja mq_receive lähettää ja vastaanottaa tietoja jonossa.

Syntaksi
Yllä olevan jonopuhelun syntakse näkyy alla:

#sisältää
/ * käytetään tiedostojen avaamiseen * /
#sisältää
/ * tiedoston määrittämiseksi polun perusteella * /
#sisältää
/ * sisällyttää viestijonojen kuvaukset * /
mqd_t mq_open (const-merkki * nimi, int oflag);
/ * avataksesi jonon * /
mqd_t mq_open (const-merkki * nimi, int oflag, mode_t-tila,
struct mq_attribute * -attribuutti);

Mq_Flags: Voi olla O tai ei-estetty

Mq_MaxMsg: Jonoon syötettävien viestien enimmäismäärä

Mq_Msgsize: Suurin tavujen määrä viestissä

Mq_CurMsgs: Tällä hetkellä lähetetyt viestit jonossa

mq_close puhelut: Sulje kaikki jonokuvaajat.

mq_notify

Se on puhelu, jota käytetään saapumisilmoituksen rekisteröimiseen ja rekisteröinnin poistamiseen, kun viesti saapuu tyhjään jonoon.

Syntaksi

#sisältää
/ * sisällyttää kaikki viestijonon kuvaukset koodista * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * ilmoittaaksesi viestin saapumisesta jonoon * /

mq_unlink

Sitä käytetään jonon, jolla on jonon_nimi, poistamiseen.

Syntaksi

int mq_unlink (const char * jononimi);
/ * Jos haluat poistaa jonon, jonka nimi on jonon_nimi * /

mq_getattr, mq_setattr

Tällä toiminnolla on attribuuttirakenne:

struct mq_attr käytetään viestijonona kuvailijoille.

mq_setattr käytetään määrittämään määritteet jonossa.

Syntaksi

#sisältää
int mq_getattribute (mqd_t mqdes, struct mq_attribute * -attribuutti);
int mq_setattribute (mqd_t mqdes, const structure mq_attribute * uusiattribuutti,
struct mq_attribute * oldattr);

Esimerkki: Asiakas-palvelin-viestintä POSIX-yhteyden kautta

Seuraava on esimerkki asiakas-palvelin-viestinnän suorittamisesta POSIX-viestijonojen kautta. Esimerkissä meillä on asiakastiedosto ja palvelintiedosto.

Meillä on kaksi tiedostoa: ensimmäinen (palvelin) tiedosto on palvelin.c, ja toinen (asiakas) tiedosto on asiakas.c.

Palvelinkoodi

Alla olevassa kuvassa näkyy koodi, jota käytimme asiakas-palvelin-viestintään. Ensin kutsuimme joitain kirjastoja määrittelemään merkkijonot, muuttujat ja funktiot. Sitten määritimme fcntl -toiminto ja jonopalvelimen nimi. Sen jälkeen määriteltiin palvelinjonon nimi, sen jälkeen sen viestin koko ja puskurikoko, jotta voimme määrittää puskuriin sopivat viestien koon kerrallaan. Seuraavaksi soitimme ja kuvasimme jonot, sitten luodaan seuraavat tunnukset nähdäksesi asiakkaan vastauksen, kun se on lähetetty asiakkaalle. Lopuksi vahvistus saatiin päätökseen tulostamalla viesti palvelimen päästä. Seuraavassa osassa näet liput, joista on keskusteltu edellisessä osassa.

Alustimme kaikki liput, mukaan lukien mq_flags, mq_maxmsgs, jne. jatkaa pyyntöjen tallentamista. Sitten sovellimme ehtoa palvelimen nimeen ja tallensimme viestit jonopuskuriin. Tämän jälkeen, varastoinnin aikana, varmistimme, että jonot noudattivat ensin tullutta -perusteista prioriteettisääntöä. Lopussa koodi näyttää vikailmoituksen, jos asiakaspäätteestä on saatu virheitä. Lopuksi poistuimme palvelimelta lähettämään pyynnön asiakkaalle.

Tallenna palvelin.c-tiedosto

Asiakaskoodi

Keskustelemme nyt toisesta tiedostosta. Alla oleva kuva on koodi, jota käytimme asiakas-palvelin-viestintään. Koodi alkoi kutsumalla standardikirjastoja ja määrittelemällä muuttujien otsikot. Sitten määriteltiin merkkijonot ja kaiken tyyppiset tiedot. Sen jälkeen ilmoitimme jonon otsikon määritellä palvelimen jonon nimi. Seuraavaksi määritimme käyttöoikeusjonot ja viestin koon jonossa sekä viestipuskurin koon (enimmäiskoko, joka mahtuu jonoon).

Kuvailemme jonoja ja luomme uuden asiakkaan vastaanottamaan palvelimen päästä lähetetyt viestit. Sitten soitamme liput ja alustamme ne, ja kutsumme asiakaspääte-toiminnon. Se sulkee toiminnon virheen sattuessa. Arvo tallennetaan puskuriin, ja palveluvastaukselle lähetetään pyyntövastaus. Vastauksen sattuessa palvelin toimittaa tunnuksen, joka tulostetaan, kun asiakaspääte on syöttänyt syötteen. Virheen sattuessa se palauttaa virhearvot, ts.e., asiakas ei ole pystynyt lähettämään viestiä palvelimelle. Sen jälkeen poistumme asiakkaasta.

Tallenna asiakas.c-tiedosto

Tiedostojen suorittaminen

Käytämme a gcc kääntäjä suorittaa tiedostot. Suorita palvelimen lopputiedosto kirjoittamalla liitetty komento pääteikkunaan:

$ sudo gcc -palvelin.c -lrt

Kirjoita seuraavaksi seuraava:

$ ./ a.ulos

Tulos näkyy seuraavasti:

Siirry asiakkaan vastaukseen kirjoittamalla seuraava:

$ sudo gcc -asiakas.c -lrt

Suorita sitten seuraava:

$ ./ a.ulos

Tulos näkyy seuraavasti:

Johtopäätös

Tässä artikkelissa opit POSIX-viestijonojen lähettämisen C-ohjelmoinnilla sekä joitain sen toimintoja. Sitten näit joitain esimerkkejä tästä prosessista yksityiskohtaisemmin.

Kuinka Xdotoolia käytetään stimuloimaan hiiren napsautuksia ja näppäilyjä Linuxissa
Xdotool on ilmainen ja avoimen lähdekoodin komentorivityökalu hiiren napsautusten ja näppäimistön simulointiin. Tässä artikkelissa käsitellään lyhyttä...
Viisi parasta ergonomista tietokonehiirtä Linux-tuotteille
Aiheuttaako pitkäaikainen tietokoneen käyttö kipua ranteessasi tai sormissasi?? Onko sinulla nivelten jäykkyys ja sinun on jatkuvasti ravistettava kät...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...