C Programiranje

Redovi poruka POSIX s programiranjem na jeziku C

Redovi poruka POSIX s programiranjem na jeziku C

POSIX međuprocesna komunikacija (IPC)

IPC se koristi za produženja u stvarnom vremenu. Ti su redovi poruka dio Linuxa. Ti se pozivi sada koriste kao standard, ali možda su dio suvremenih verzija. Te je pozive jednostavno implementirati s mnogo čišćim sučeljem.

Redovi poruka POSIX u Linuxu

V redovi poruka u sustavu Linux identificiraju se pomoću ključeva koji su dobiveni pomoću ftok poziva. Ovi redovi poruka POSIX obično koriste nizove imena. U Linux sustavima, POSIX redovi nazivaju se nizovima. Smatra se da ovi nizovi počinju s /, a zatim imaju druge znakove.  Procesi koji slijede i znaju naziv naziva reda s odgovarajućim pravima mogu slati ili primati poruke u red i iz njega. To će vam pomoći u obavljanju važnih funkcija.

Što su pozivi u redu čekanja poruka POSIX?

Redovi poruka POSIX moraju se povezati s bilo kojom knjižnicom koja stvarno izlazi. Slijedi nekoliko korištenih poziva:

librt koristi opciju kompajlera -lrt

Imena poziva počinju s mq_prefixom

Pojedinosti o pozivima u redu razmatraju se u nastavku:

>> mq_open, mq_close

Ova se funkcija koristi za otvaranje POSIX reda.

Mq_open je funkcija koja se koristi za pozivanje imena reda. Sljedeći je parametar zastava koja se koristi za primanje poruka. O_WRONLY se koristi za slanje poruka, a O_RDWR za slanje i primanje operacija unutar reda čekanja. Korisnici mogu upotrijebiti zastavicu O_NONBLOCK za određivanje reda u način neblokiranja i mq_send i mq_primiti za slanje i primanje podataka u redu čekanja.

Sintaksa
Sintaksa za gornji poziv u redu prikazana je u nastavku:

#include
/ * koristi se za otvaranje datoteka * /
#include
/ * za određivanje datoteke na temelju putanje * /
#include
/ * uključiti opise reda poruka * /
mqd_t mq_open (const znak * ime, int oflag);
/ * za otvaranje i pristup redu * /
mqd_t mq_open (const znak * ime, int oflag, mode_t mode,
struct mq_attribute * atribut);

Mq_Zastavice: Može biti O ili neblokirano

Mq_MaxMsg: Maksimalan broj poruka koje se mogu unijeti unutar reda čekanja

Mq_Msgsize: Maksimalan broj bajtova u poruci

Mq_CurMsgs: Trenutno poslane poruke u redu čekanja

mq_close pozivi: Za zatvaranje svih deskriptora reda.

mq_notify

To je poziv koji se koristi za registraciju i odjavu obavijesti o dolasku kada poruka uđe u prazan red.

Sintaksa

#include
/ * uključiti sve opise reda poruka iz koda * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * da obavijesti o primanju poruke u redu čekanja * /

mq_unlink

Koristi se za uklanjanje reda s imenom_reda.

Sintaksa

int mq_unlink (const char * ime_reda);
/ * Uklanjanje reda s imenom queue_name * /

mq_getattr, mq_setattr

Ova funkcija ima strukturu atributa:

struct mq_attr koristi se kao red poruka za deskriptore.

mq_setattr koristi se za postavljanje atributa unutar reda.

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);

Primjer: Komunikacija klijent-poslužitelj putem POSIX-a

Slijedi primjer izvođenja komunikacije klijent-poslužitelj putem redova poruka POSIX. U primjeru ćemo imati datoteku klijenta i datoteku poslužitelja.

Imat ćemo dvije datoteke: prva (poslužiteljska) datoteka je poslužitelju.c, a druga datoteka (klijenta) je klijent.c.

Šifra poslužitelja

Slika prikazana dolje prikazuje kôd koji smo koristili za komunikaciju klijent-poslužitelj. Prvo smo nazvali neke knjižnice da definiramo nizove, varijable i funkcije. Zatim smo definirali fcntl funkcija i ime poslužitelja reda. Nakon toga definirali smo ime reda poslužitelja, nakon čega slijedi njegova veličina poruke i veličina međuspremnika, kako bismo definirali veličinu poruka kako bi odgovarale našem međuspremniku. Zatim smo nazvali i opisali redove, a zatim smo generirali sljedeće tokene da bismo vidjeli odgovor klijenta nakon što je poslan klijentu. Konačno, potvrda je dovršena ispisom poruke s kraja poslužitelja. U sljedećem ćete odjeljku vidjeti zastave o kojima je bilo riječi u prethodnom odjeljku.

Inicirali smo sve zastavice, uključujući mq_ zastave, mq_maxmsgs, itd. da biste nastavili s pohranjivanjem zahtjeva. Zatim smo primijenili uvjet na ime poslužitelja i poruke pohranili u međuspremnik reda. Nakon toga, u vrijeme pohrane, osigurali smo da su redovi slijedili pravilo prioriteta zasnovano na prvom dolasku. Na kraju, kôd prikazuje poruku o neuspjehu ako postoje pogreške primljene s klijentskog kraja. Napokon, izašli smo iz poslužitelja kako bismo poslali zahtjev klijentu.

Spremite poslužitelj.c datoteka

Šifra klijenta

Sada ćemo razgovarati o drugom spisu. Slika prikazana ispod je kod koji smo koristili za komunikaciju klijent-poslužitelj. Kôd je započeo pozivanjem standardnih knjižnica i definiranjem zaglavlja varijabli. Zatim smo definirali nizove i sve vrste podataka. Nakon toga proglasili smo zaglavlje reda kako bismo definirali ime reda poslužitelja. Dalje, definirali smo redove dozvola i veličinu poruke unutar reda, zajedno s veličinom međuspremnika poruka (maksimalna veličina koja bi mogla stati u red čekanja).

Opisat ćemo redove i stvoriti novog klijenta za primanje poruka poslanih s kraja poslužitelja. Zatim ćemo pozvati zastavice i inicijalizirati ih te pozvati funkciju kraj klijenta. Iz funkcije će izaći u slučaju pogreške. Vrijednost je pohranjena u međuspremniku, a odgovor na zahtjev šalje se poslužitelju. U slučaju odgovora, poslužitelj će tada pružiti token koji se ispisuje nakon što je kraj klijenta ušao u ulaz. U slučaju pogreške, vratit će vrijednosti pogreške, tj.e., klijent nije mogao poslati poruku poslužitelju. Nakon toga izaći ćemo iz klijenta.

Spremi klijenta.c datoteka

Izvršavanje datoteka

Koristimo a gcc kompajler za izvršavanje datoteka. Da biste pokrenuli završnu datoteku poslužitelja, upišite dodanu naredbu u prozor terminala:

$ sudo gcc poslužitelj.c -lrt

Zatim upišite sljedeće:

$ ./ a.van

Izlaz će se pojaviti na sljedeći način:

Prijelazeći na odgovor klijenta, upišite sljedeće:

$ sudo gcc klijent.c -lrt

Zatim pokrenite sljedeće:

$ ./ a.van

Izlaz će se pojaviti na sljedeći način:

Zaključak

U ovom ste članku naučili kako slati redove poruka POSIX s C programiranjem, kao i neke od njegovih funkcija. Zatim ste detaljnije vidjeli neke primjere ovog postupka.

10 najboljih igara za igranje na Ubuntuu
Windows platforma bila je jedna od dominantnih platformi za igre zbog ogromnog postotka igara koje se danas razvijaju kako bi podržavale Windows. Može...
5 najboljih arkadnih igara za Linux
U današnje vrijeme računala su ozbiljni strojevi koji se koriste za igre na sreću. Ako ne uspijete dobiti novi visoki rezultat, znat ćete na što misli...
Bitka za Wesnoth 1.13.6 Razvoj objavljen
Bitka za Wesnoth 1.13.6 objavljeno prošlog mjeseca, šesto je razvojno izdanje u izdanju 1.13.x series i donosi niz poboljšanja, ponajviše korisničkog ...