Kommunikasjon kan oppstå mellom systemene som er tilkoblet eller ikke relatert, da vi alle er klar over. SHMGet System Call -metoden brukes til å enten etablere et nytt delt minnesegment eller lokalisere et eksisterende ved hjelp av en nøkkel. Delte minnesegmenter er minneseksjoner som kan nås av flere prosesser, og som når de er etablert, forblir tilgjengelig til de eksplisitt blir ødelagt med SHMCTL -funksjonen. Denne artikkelen vil vise deg hvordan du bruker SHMGet -systemanropsfunksjonen på C -språk for å tildele det delte minnet på en rekke måter.
Syntaks for SHMGet -systemanropsfunksjonen på C -språk
int shmget (key_t nøkkel, størrelse_t størrelse, int shmflg);
Her har vi en generell syntaks av SHMGet -systemanropsfunksjonen. Det er forskjellige parametere som er bestått i SHMGet -funksjonen. Disse parametrene er forklart i detaljer i følgende diskusjon.
Verdien av parameternøkkelen returneres av SHMGET () som returnerer identifikasjonen som er delt minnesegment av systemet V. Hvis nøkkelen er IPC -privat eller ikke IPC privat, eksisterer det ikke noe delt minnesegment som tilsvarer nøkkelen, og IPC -opprettelsen er definert i SHMFLG, en ny delt minnesegmentering med en størrelse som tilsvarer verdien av størrelsen som skaleres opp til et multiplum Sidestørrelse produseres. (Dette ligner på den åpne (2) Effekten av o Creat | o ekskl.).
Segmentets nødvendige størrelse er spesifisert av størrelsesargumentet. Hvis segmentet for tiden oppstår, kan ikke størrelsen overstige størrelsen som ble gitt når det ble opprettet. For å definere hvilke brukere som er autorisert til å få tilgang til eller endre minnesegmentet, kan noen av autoritetsbitene S Irusr, S Iwusr, S irgrp, S IWGRP, S Iroth og S Iwoth leveres.
Eksempel
Eksempelkoden viser hvordan du bruker SHMGet- og SHMAT -systemanropsfunksjonene i en enkelt prosess for å lage et nytt delt segment og deretter skrive litt tekst inn i det. Eksempelkoden viser også at de flere prosessene kan overføre ved hjelp av det kollektive minnet.
#inkludereFørst inkluderte vi noen gjeldende overskriftsfiler. Den delte minnefunksjonen er definert i “SYS/SHM.h ”headerfil. Begynn med kodeimplementeringen. Vi definerte størrelsen på segmentet ved å bruke enummetoden. Variabelen er deklarert som dataene der strengen initialiseres. Deretter har vi hovedfunksjonssamtalen. I hovedfunksjonen til dette eksemplet er variablene definert og initialisert. Segement_id initialiseres med SHMget -metoden. Minnesegmentnøkkelen er den første av de tre argumentene som er gitt til SHMGet -metoden. Hvis et nytt segment krever å bli etablert, kan nøkkelverdien være IPC Private Macro eller nøkkelverdien til et eksisterende segment hvis samtalen trenger å få minneidentifikasjonen.
Størrelsen på segmentet er spesifisert av det andre argumentet, og tillatelsesflaggene, som kan eller-ED for å legge til mulige verdier, er spesifisert av det tredje argumentet til SHMGet.
Segmentidentifikatoren mottas etter at minnesegmentet er dannet, og det kan deretter sendes til SHMAT -funksjonen for å koble minnesegmentet. Som en annen inngang til SHMAT kan brukeren spesifisere adressen der minnesegmentet skal legges ved. Likevel er det mer vanlig å la kjernen bestemme adressen og bruke null for å indikere det. Printf -funksjonen skriver ut segment -ID -verdien og det vedlagte delte minnet og skriver ut "hei, der" -strengen.
Den primære prosessen “PID_T” gafler og en barneprosess “Child_pid” genereres, som hver sparer en distinkt streng i samme adresse. I mellomtiden stopper foreldreprosessen og venter på at barnet skal avsluttes med en vellykket kode. Den nylig lagrede strengen er skrevet til konsollen. Hvis mange prosesser trenger å endre og skaffe seg de delte minnesegmentene samtidig, må synkroniseringsteknikker som semaforer brukes.
Utførelsen av den forrige koden genererer en utdata som denne. Segment -IDen genereres, den delte minneadressen vises, og strengen skrives også ut på ledeteksten. Barnet PID og statusen til barnet som er forlatt genereres sammen med meldingen, "Nye data i barneprosess".
Konklusjon
Vi gikk over SHMGet System Call -funksjonen i detalj i dette innlegget. SHMGet () -funksjonen henter nøkkelenes delte minneidentifikasjon. Gjennom SHMGet -systemanropsfunksjonen kan vi få det delte minnet. Før vi kan bruke SHMGet () -funksjonen, må vi importere mange biblioteker. Denne funksjonen inneholder parametrene som kontrollerer en rekke funksjoner. Dette innlegget hjelper deg med å forbedre programmeringsferdighetene dine og ta opp problemene du måtte ha hatt om SHMGet -systemanropsfunksjonen.