C Programmering

POSIX Delt minne med C-programmering

POSIX Delt minne med C-programmering
POSIX delt minne er et rammeverk for interprosesskommunikasjon (IPC) spesifisert i POSIX-spesifikasjonene. To (eller flere) oppgaver kan lese fra den og skrive til den delte minnesonen mens de oppretter det delte minnet. POSIX delt minne håndhever ikke alltid kopiutbetalinger, i motsetning til andre IPC-strukturer (f.eks.g., rør, stikkontakt osv.), og er ønskelig for visse programmer.

POSIX delt minnesamtaler

POSIX-delte minnefunksjoner fokuserte på UNIX-konseptet om at objektet må være et dokument når du utfører input / output-aktiviteter på en enhet. Derfor, fordi du resiterer og skriver til en gjensidig POSIX-minneenhet, må sistnevnte betraktes som et dokument. Et minnekartet dokument er en POSIX delt minneenhet. For å bruke shm_open systemanropsfunksjon under / dev / shm, separate genererte minnedokumenter genereres. Det er bare to dedikerte anrop fra delt minnesystem fra POSIX, shm_open, og shm_unlink, som er nært beslektet med å åpne og fjerne tilknytning til filsystemanrop. De avkortes, mmap, og kartlegge rammeverk for dokumenter brukes til å utføre andre oppgaver i POSIX delt minne. Det er nødvendig å koble et program som bruker POSIX delt minnesamtaler til -lrt.

Programmer som bruker POSIX delte minnesamtaler må gå gjennom følgende trinn:

Ved hjelp av shm_open (), danne et delt minneobjekt. Dokumentbeskrivelsen kan tilbakestilles hvis dannelsen av objektet lykkes.

Med ftrunker (), størrelsen på objektet vil bli løst.

Med kart() og MAP_SHARED, avgrense dette objektet i det nåværende adresserommet.

Les / skriv det delte minnet.

Via kartlegge (), avgrense det delte minnet.

Bruk Lukk() å lukke objektet.

Gjennom shm_unlink (), slett objektet i det delte minnet.

shm_open ()

Som beskrevet ovenfor, shm_open () brukes til å generere et nytt delt minneobjekt. Det gjør objektet tilgjengelig for anropsprosedyren ved hjelp av den tilbakeførte deskriptoren. Følgende er definisjonen av denne funksjonsanropet:

>> Int shm_open (const char * name, int oflag, mode_t mode);

Den første parameteren er navnet på det delte minneobjektet. Det er en null-avsluttet streng av /Navn type, med forutsetningen om at ingen andre tegn kan være en skråstrek annet enn den første karakteren. Oflag er et lite slør opprettet med flere av de foregående flaggene av OR-ing, enten via O_RDONLY eller O_RDWR. Parametrene som er beskrevet, indikerer at det delte minneobjektet må dannes (O_CREAT) når det ikke allerede eksisterer, og objektet er tilgjengelig for lesing og skriving (O_RDWR). Det aller siste argumentet angir kataloggodkjenningene for objektet med delt minne.

shm_unlink ()

Shm_unlink () eliminerer POSIX delt minneenhet som tidligere ble utviklet. Heltallets dokumentbeskrivelse for objektet med delt minne returneres via en effektiv samtale til shm_open (). Som definert under shm_open (), parameternavnet er tittelen på den delte minneenheten. Følgende er definisjonen av shm_unlink () funksjon:

>> Int shm_unlink (const char * name);

ftrunker ()

Ved å sette objektet, ftrunker () metoden er avstengt for å sette opp enhetsstørrelsen i byte. Funksjonsdefinisjonen er som følger:

>> Int ftruncate (int fd, off_t length);

Når du konstruerer et delt POSIX-minne, er det faktisk null byte i kapasitet. Du kan gjengi POSIX delt minneenhet med byte av størrelseslengde via avskjære. Avskjære gir null ved utførelse. Avskjære utganger -1 i tilfelle feil og errno er satt til å utløse feilen.

mmap ()

Til slutt blir et minnekartet dokument med den delte minnet satt inn via mmap () metode. Deretter gir den en minnekartet dokumentpeker som blir kastet av for å nå enheten for delt minne. Følgende er definisjonen av mmap () funksjon:

>> Void * mmap (void * addr, size_t length, int prot, int flags, int fd, off_t offset);

I dette er 'addr' adressen den vil bli kartlagt til. 'Lengden' er området for det delte minnet. Verdiene for prot kan variere, men vi vil bruke PROT READ | PROT SKRIV. Det er flere flagg, men MAP SHARED er viktig for delt minne. Nå er 'fd' en dokumentbeskrivelse som ble oppnådd tidligere. Offset er det punktet der kartleggingen begynner i den delte minneenheten; 0-forskyvningsverdien kan også brukes. Etter ferdigstillelse, mmap () gir pekeren til kartleggingsposisjonen til den delte minneenheten.

kartlegge ()

På posisjonen regissert av addr og få størrelse, lengde, kartlegge tar kartet om det delte minneposten. Munmap gir 0 ved fullføring og -1 i unøyaktighetssituasjonen, i hvilket tilfelle errno er tildelt for å utløse feilen.

>> Void munmap (void * addr, size_t length);

Eksempel: Avsender og mottaker

La oss ta eksemplet med avsenderen og mottakeren. Avsenderen vil opprette et nytt objekt med delt minne med navnet / shmem-eksempel og skriv tre tall i det delte minnet gjennom det. Nå kan mottakeren avsløre objektet med delt minne og resitere de tre tallene fra minnet. Vi lager tre filer med navnene protokoll.h, avsender.c, og mottaker.c.

$ touch-protokoll.h
$ touch avsender.c
$ berøringsmottaker.c

Deretter vil vi legge til kildekoden nedenfor i filens protokoll.h, "avsender.c, 'og' mottaker.c.Nå skal vi redde alle og lukke dem.

Nå skal vi kompilere og bli med koden ovenfor ved å bruke nøkkelordet -lrt separat for avsenderen.c og mottaker.c-fil. Her er kommandoen for å gjøre det:

$ gcc -o avsender.c -lrt
$ gcc -o mottaker mottaker.c -lrt

Nå vil vi kjøre avsenderkoden ved hjelp av følgende kommando. Resultatet er gitt nedenfor.

$ ./ avsender

Når du kjører avsenderkoden, er det delte minneobjektet generert og kan bli funnet under / dev / shm ved hjelp av kommandoen nedenfor:

$ ls -l / dev / shm | grep shmem-eksempel

Når vi kjører mottakerkoden, får vi utdataene nedenfor:

$ ./ mottaker

Hver gang funksjonen gm_unlink () kalles ved hjelp av filen 'mottaker.c, 'objektet / dev / shm / shmem-eksempel vil bli løsrevet. I dette tilfellet får du ikke noe objekt på utdata, som vist nedenfor.

$ ls -l / dev / shm / shmem-eksempel

Konklusjon

I denne artikkelen lærte du hvordan du bruker POSIX Delt minne med C-programmering i Ubuntu 20.04, inkludert alle funksjonsanrop som brukes til å etablere delt minne. Jeg håper denne artikkelen hjalp deg med å forbedre din programmeringskunnskap og dekket enhver tvil du har om dette emnet.

Mus Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
Legg til musebevegelser i Windows 10 ved hjelp av disse gratisverktøyene
De siste årene har datamaskiner og operativsystemer utviklet seg sterkt. Det var en tid da brukere måtte bruke kommandoer for å navigere gjennom filad...
Mus Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Kontroller og administrer musebevegelser mellom flere skjermer i Windows 10
Dual Display Mouse Manager lar deg kontrollere og konfigurere musebevegelse mellom flere skjermer, ved å bremse bevegelsene nær grensen. Windows 10/8,...
Mus WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
WinMouse lar deg tilpasse og forbedre musemarkørenes bevegelse på Windows PC
Hvis du vil forbedre standardfunksjonene til musepekeren, bruk freeware WinMouse. Det legger til flere funksjoner som hjelper deg å få mest mulig ut a...