C Programování

Fronty zpráv POSIX s programováním C

Fronty zpráv POSIX s programováním C

Meziprocesová komunikace POSIX (IPC)

IPC se používá pro rozšíření v reálném čase. Tyto fronty zpráv jsou součástí Linuxu. Tyto hovory se nyní používají jako standard, ale mohou být součástí současných verzí. Tyto hovory lze snadno implementovat pomocí mnohem čistšího rozhraní.

Fronty zpráv POSIX v Linuxu

Fronty zpráv V v systému Linux jsou identifikovány pomocí klíčů získaných pomocí ftok hovory. Tyto fronty zpráv POSIX obvykle používají řetězce jmen. V systémech Linux se fronty POSIX nazývají řetězce. Uvažuje se, že tyto řetězce začínají na / a poté mají další znaky.  Procesy, které sledují a znají název fronty s příslušnými právy, mohou odesílat nebo přijímat zprávy do a z fronty. To pomůže při provádění důležitých funkcí.

Co jsou hovory z fronty zpráv POSIX?

Fronty zpráv POSIX se musí propojit s jakoukoli knihovnou, která skutečně končí. Následuje několik použitých hovorů:

librt používá volbu kompilátoru -lrt

Názvy volání začínají mq_prefix

Podrobnosti o hovorech ve frontě jsou popsány níže:

>> mq_open, mq_close

Tato funkce se používá k otevření fronty POSIX.

Mq_open je funkce, která se používá k volání názvu fronty. Dalším parametrem je příznak používaný k přijímání zpráv. O_WRONLY se používá k odesílání zpráv a O_RDWR se používá k odesílání a přijímání operací ve frontě. Uživatelé mohou pomocí příznaku O_NONBLOCK určit frontu do neblokujícího režimu a mq_send a mq_receive odesílat a přijímat data ve frontě.

Syntax
Syntaxe výše uvedeného volání fronty je zobrazena níže:

#zahrnout
/ * slouží k otevření souborů * /
#zahrnout
/ * k určení souboru na základě cesty * /
#zahrnout
/ * zahrnout popisy front zpráv * /
mqd_t mq_open (const znak * jméno, int oflag);
/ * pro otevření a přístup do fronty * /
mqd_t mq_open (const znak * name, int oflag, mode_t mode,
struct mq_attribute * atribut);

Mq_Flags: Může to být O nebo neblokované

Mq_MaxMsg: Maximální počet zpráv, které lze zadat do fronty

Mq_Msgsize: Maximální počet bajtů ve zprávě

Mq_CurMsgs: Aktuálně odeslané zprávy ve frontě

mq_close hovory: Zavřít všechny deskriptory fronty.

mq_notify

Jedná se o volání sloužící k registraci a zrušení registrace oznámení o příjezdu, když zpráva vstoupí do prázdné fronty.

Syntax

#zahrnout
/ * zahrnout všechny popisy fronty zpráv z kódu * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * upozornit na příchod zprávy ve frontě * /

mq_unlink

Slouží k odebrání fronty, která má název_fronty.

Syntax

int mq_unlink (const char * queue_name);
/ * Odebrání fronty s názvem queue_name * /

mq_getattr, mq_setattr

Tato funkce má strukturu atributů:

struct mq_attr se používá jako fronta zpráv pro deskriptory.

mq_setattr se používá pro nastavení atributů uvnitř fronty.

Syntax

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

Příklad: Komunikace klient-server přes POSIX

Následuje příklad provádění komunikace klient-server prostřednictvím front zpráv POSIX. V příkladu budeme mít soubor klienta a soubor serveru.

Budeme mít dva soubory: první (serverový) soubor je serveru.C, a druhý (klientský) soubor je klient.C.

Kód serveru

Obrázek zobrazený níže ukazuje kód, který jsme použili pro komunikaci klient-server. Nejprve jsme zavolali některé knihovny, abychom definovali řetězce, proměnné a funkce. Poté jsme definovali fcntl funkce a název serveru fronty. Poté jsme definovali název fronty serveru, následovaný velikostí zprávy a velikostí vyrovnávací paměti, abychom definovali velikost zpráv, aby se vešly do naší vyrovnávací paměti najednou. Dále jsme zavolali a popsali fronty, poté jsme vygenerovali další tokeny, abychom viděli odpověď klienta, jakmile byla odeslána klientovi. Nakonec bylo potvrzení dokončeno vytištěním zprávy z konce serveru. V další části uvidíte příznaky popsané v předchozí části.

Inicializovali jsme všechny příznaky, včetně mq_flags, mq_maxmsgs, atd. pokračovat v ukládání požadavků. Poté jsme podmínku aplikovali na název serveru a uložili jsme zprávy do vyrovnávací paměti fronty. Poté jsme v době skladování zajistili, aby fronty následovaly pravidlo priority, kdo přijde dříve. Na konci kód zobrazí zprávu o selhání, pokud dojde k chybám přijatým z klientského konce. Nakonec jsme opustili server a odeslali požadavek klientovi.

Uložte server.soubor c

Klientský kód

Nyní probereme druhý soubor. Obrázek zobrazený níže je kód, který jsme použili pro komunikaci klient-server. Kód začal voláním standardních knihoven a definováním záhlaví proměnných. Poté jsme definovali řetězce a všechny typy dat. Poté jsme deklarovali záhlaví fronty, abychom definovali název fronty serveru. Dále jsme definovali fronty oprávnění a velikost zprávy uvnitř fronty spolu s velikostí vyrovnávací paměti zpráv (maximální velikost, která se vejde do fronty).

Popíšeme fronty a vytvoříme nového klienta pro příjem zpráv odeslaných z konce serveru. Potom zavoláme příznaky a inicializujeme je a zavoláme funkci na straně klienta. V případě chyby funkci ukončí. Hodnota je uložena uvnitř vyrovnávací paměti a na server je odeslána odpověď na požadavek. V případě odpovědi pak server poskytne token, který se vytiskne, jakmile klient zadá vstup. V případě chyby vrátí chybové hodnoty, tj.E., klient nebyl schopen odeslat zprávu na server. Poté klienta opustíme.

Uložte klienta.soubor c

Provádění souborů

Používáme a gcc kompilátor ke spuštění souborů. Chcete-li spustit koncový soubor serveru, zadejte připojený příkaz do okna terminálu:

$ sudo gcc server.c -lrt

Dále zadejte následující:

$ ./A.ven

Výstup se zobrazí takto:

Přejděte na odpověď klienta a zadejte následující:

$ sudo gcc klient.c -lrt

Potom spusťte následující:

$ ./A.ven

Výstup se zobrazí takto:

Závěr

V tomto článku jste se dozvěděli, jak posílat fronty zpráv POSIX s programováním v C, stejně jako některé z jeho funkcí. Poté jste viděli podrobněji některé příklady tohoto procesu.

Střední tlačítko myši nefunguje ve Windows 10
The prostřední tlačítko myši pomáhá procházet dlouhé webové stránky a obrazovky se spoustou dat. Pokud se to zastaví, budete nakonec používat klávesni...
Jak změnit levé a pravé tlačítko myši na počítači se systémem Windows 10
Je úplnou normou, že všechna zařízení počítačových myší jsou ergonomicky navržena pro praváky. K dispozici jsou však myší zařízení, která jsou speciál...
Emulace kliknutí myší vznášením pomocí myši Clickless Mouse ve Windows 10
Používání myši nebo klávesnice ve špatném držení těla nadměrného používání může mít za následek mnoho zdravotních problémů, včetně napětí, syndromu ka...