C Programmering

POSIX-meddelelseskøer med C-programmering

POSIX-meddelelseskøer med C-programmering

POSIX Inter-proces kommunikation (IPC)

IPC bruges til realtidsudvidelser. Disse meddelelseskøer er en del af Linux. Disse opkald bruges som standard nu, men kan være en del af nutidige versioner. Disse opkald er nemme at implementere med en meget renere grænseflade.

POSIX-meddelelseskøer i Linux

V-meddelelseskøer i et Linux-system identificeres ved hjælp af nøgler, der opnås ved hjælp af ftok opkald. Disse POSIX-meddelelseskøer bruger normalt navnestrenge. I Linux-systemer kaldes POSIX-køer strenge. Disse strenge anses for at starte med / og har derefter andre tegn.  Processer, der følger og kender navnet på kønavnet med passende rettigheder, kan sende eller modtage meddelelser til og fra køen. Dette vil hjælpe med at udføre vigtige funktioner.

Hvad er POSIX-meddelelseskøopkald?

POSIX-meddelelseskøer skal linke til ethvert bibliotek, der afslutter på rigtig vis. Følgende er et par opkald, der bruges:

librt bruger kompilatorindstillingen -lrt

Opkaldsnavne begynder med mq_prefix

Detaljerne i køopkald diskuteres nedenfor:

>> mq_open, mq_close

Denne funktion bruges til at åbne en POSIX-kø.

Mq_open er en funktion, der bruges til at kalde køens navn. Den næste parameter er et flag, der bruges til at modtage meddelelserne. O_WRONLY bruges til at sende meddelelser, og O_RDWR bruges til at sende og modtage operationer inden for køen. Brugere kan bruge O_NONBLOCK-flag til at angive køen til den ikke-blokerende tilstand og mq_send og mq_modtag at sende og modtage data i en kø.

Syntaks
Syntaksen for ovenstående køopkald vises nedenfor:

#omfatte
/ * bruges til at åbne filerne * /
#omfatte
/ * for at bestemme en fil baseret på stien * /
#omfatte
/ * for at inkludere beskedkøbeskrivelser * /
mqd_t mq_open (const tegn * navn, int oflag);
/ * for at åbne og få adgang til køen * /
mqd_t mq_open (const-tegn * navn, int oflag, mode_t-tilstand,
struct mq_attribute * attribut);

Mq_Flags: Kan være O eller ikke-blok

Mq_MaxMsg: Maksimalt antal beskeder, der kan indtastes inde i køen

Mq_Msgsize: Maksimalt antal byte i en meddelelse

Mq_CurMsgs: I øjeblikket sendte meddelelser i en kø

mq_close opkald: For at lukke alle købeskrivelser.

mq_notify

Det er et opkald, der bruges til at registrere og afregistrere ankomstmeddelelse, når en meddelelse kommer ind i en tom kø.

Syntaks

#omfatte
/ * for at medtage alle beskrivelser af meddelelseskøer fra koden * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * for at meddele ankomsten af ​​meddelelsen i en kø * /

mq_unlink

Det bruges til at fjerne køen med kønavn.

Syntaks

int mq_unlink (const char * kønavn);
/ * For at fjerne køen med navnet som kønavn * /

mq_getattr, mq_setattr

Denne funktion har en attributstruktur:

struct mq_attr bruges som en meddelelseskø til deskriptorer.

mq_setattr bruges til at indstille attributterne i en kø.

Syntaks

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

Eksempel: Klient-server kommunikation via POSIX

Følgende er et eksempel på udførelse af klient-server-kommunikation via POSIX-meddelelseskøer. I eksemplet har vi en klientfil og serverfil.

Vi har to filer: den første (server) fil er server.c, og den anden (klient) fil er klient.c.

Serverkode

Billedet, der vises nedenfor, viser den kode, som vi brugte til klient-server-kommunikation. Først kaldte vi nogle biblioteker til at definere strenge, variabler og funktioner. Derefter definerede vi fcntl funktion og navnet på køserveren. Derefter definerede vi navnet på serverkøen efterfulgt af dens meddelelsesstørrelse og bufferstørrelse for at definere størrelsen på meddelelser, der passer til vores buffer ad gangen. Dernæst kaldte vi og beskrev køerne, så genererede vi de næste tokens for at se klientsvaret, når det blev sendt til klienten. Endelig blev bekræftelsen afsluttet ved at udskrive beskeden fra serverenden. I det næste afsnit vil du se flagene, der blev diskuteret i det tidligere afsnit.

Vi initialiserede alle flag, inklusive mq_flags, mq_maxmsgs, etc. for at fortsætte med lagring af anmodninger. Derefter anvendte vi betingelsen på navnet på serveren og lagrede meddelelserne i købufferen. Efter dette på tidspunktet for opbevaring sikrede vi, at køerne fulgte en prioritetsregel baseret på først til mølle. I slutningen viser koden en fejlmeddelelse, hvis der modtages fejl fra klientens ende. Endelig forlod vi serveren for at sende anmodningen til klienten.

Gem serveren.c-fil

Kundekode

Vi vil nu diskutere den anden fil. Billedet, der vises nedenfor, er den kode, vi brugte til klient-server-kommunikationen. Koden begyndte med at kalde standardbiblioteker og definere variable overskrifter. Derefter definerede vi strengene og alle typer data. Derefter erklærede vi overskriften i køen for at definere serverkønavnet. Dernæst definerede vi tilladelseskøer og meddelelsesstørrelse inde i køen sammen med størrelsen på meddelelsesbufferen (den maksimale størrelse, der kunne passe inde i køen).

Vi beskriver køerne og opretter en ny klient til at modtage de beskeder, der sendes fra slutningen af ​​serveren. Derefter kalder vi flagene og initialiserer dem og kalder klient-slut-funktionen. Den afslutter funktionen i tilfælde af en fejl. Værdien lagres inde i bufferen, og et anmodningssvar sendes til serveren. I tilfælde af et svar leverer serveren derefter tokenet, der udskrives, når klientenden har indtastet input. I tilfælde af en fejl returnerer den fejlværdierne, dvs.e., klienten har ikke været i stand til at sende en besked til serveren. Derefter forlader vi klienten.

Gem klienten.c-fil

Udførelse af filerne

Vi bruger en gcc compiler til at udføre filerne. For at køre serverens slutfil skal du skrive den vedhæftede kommando i terminalvinduet:

$ sudo gcc-server.c -lrt

Skriv derefter følgende:

$ ./en.ud

Outputtet vises som følger:

Gå videre til klientsvaret og skriv følgende:

$ sudo gcc-klient.c -lrt

Kør derefter følgende:

$ ./en.ud

Outputtet vises som følger:

Konklusion

I denne artikel lærte du, hvordan du sender POSIX-meddelelseskøer med C-programmering, samt nogle af dens funktioner. Derefter så du nogle eksempler på denne proces mere detaljeret.

Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...
Mus Sådan ændres venstre og højre museknap på Windows 10-pc
Sådan ændres venstre og højre museknap på Windows 10-pc
Det er en ganske normal, at alle computermusenheder er ergonomisk designet til højrehåndede brugere. Men der er musenheder til rådighed, der er specie...