Msync 2 C -funksjon

Msync 2 C -funksjon
Har du noen gang hørt om noen funksjoner som bruker og styrer minnet om et system i Linux? Msync () -funksjonen er en av dem. Metoden synkroniserer innholdet i filen med områdets nåværende innhold. Det har vært kjent blant Linux -brukerne å synkronisere minnet med fysisk lagring av et system. Innenfor denne artikkelen vil vi forklare syntaks og bruk. For dette vil vi gå gjennom hvert av argumentene en etter en.

Syntaks:

#inkludere
Int msync (void * addr, size_t len, int flaggs);

Addr: Starten på adressene du ønsker å synkronisere som et område.

Len: Antall stedets lengde uttrykt i byte.

Forklaring:

Innenfor disse fulle sidene som inneholder en del av adresseområdet til prosessen, som begynner på adresse ADDR og kjører for lengdebyte, må MSYNC () -metoden skrive all oppdatert informasjon til vedvarende lagringsområder. Msync () skal ikke ha innvirkning hvis det ikke er noe slikt minne. MSYNC () -metoden vil deretter fjerne de lagrede sikkerhetskopiene om informasjon om nødvendig. Addr må være et multiplum av antall sider levert av SysConf () -funksjonen for implementeringen å fungere.

MSYNC (*) -metoden må sørge for at alle skriveprosessene er ferdige etter behov for den synkroniserte I/O -datasikkerhetens fullstendighet for kartlegginger til dokumenter. Implementeringen kan eventuelt skrive ut flere filegenskaper, selv om dette ikke er definert. Eventuelle oppdaterte data må ikke overføres til kjerneobjektet eller gjøres fritt tilgjengelig for visse andre operasjoner når MSYNC () -metoden utføres på MAP_Private -oversettelser. Det er ikke kjent hvor informasjonen i map_private -oversettelser er lagret permanent. [SHM | Tym] [Choice Start] Msync () spesifiserer ikke om det påvirker de delte minneobjektene eller de skrevne lagringsobjektene.

Slutt på alternativet: Hvis en forespørsel om kart ikke ble brukt til å lage oversettelsen, er denne metodens funksjonalitet udefinert.

Flaggalternativer tilgjengelig for Msync ()

Alternativerparameteren består av bitvis-inclusive eller av flere flagg som er oppført i det følgende som er spesifisert i overskriftsfilen “SYS/MMAN.H ”:

  • Ms_async: Utføre samtidig skriving
  • Ms_invalidate: Unøyaktige kartlegginger
  • MS_SYNC: Utføre samtidig skriving
  • Ms_cache_only: Siden QNX Neutrino for tiden støtter POSIX-kompatibilitet for minnekartiserte dokumenter, utfører Msync () det ønskede formålet med å skrive modifikasjoner i det oversatte minnet tilbake til den faktiske filen. Ms Cache Only (QNX Neutrino Addition; QNX Neutrino Core OS 6.3.2 eller høyere). Hvis du foretrekker QNX Neutrino -tillegg til POSIX -standardoppførselen, bruker du denne biten til å instruere metoden for å spyle eller mette databufferen (gjennom MS Async, MS Sync eller MS Invalidate Flags).
  • Hvis du endrer koden dynamisk, bruker du QNX Neutrino -utvidelsen MS Invalidate Icache for å sikre at den oppdaterte koden er det som blir utført.
  • Arbeid bare på rensede sider med QNX Neutrino Extension MS_Clean (versjon 7.0 eller nyere).

Før forespørselen var alle skrivekoblingene til systemminnet tilgjengelige for de etterfølgende leseprosessene på dokumentet. Det er uklart om lesepekerne til lagringsområdet kan få tilgang til endringene til det samme området av dokumentet som ble gjort allerede før forespørselen. Hvis de uendrede sidene innenfor det aktuelle området i tillegg er skrevet til den grunnleggende maskinvaren, er dette ikke nevnt. Når alle skriveprosessene er planlagt, kan metoden svare med en gang hvis flagget er ms_async. Når flaggene er MS_SYNC, kommer metoden på en eller annen måte ikke tilbake med mindre alle skriveprosessene er ferdige.

Ved å synkronisere lagringsregionens data med den eksisterende informasjonen som er lagret, får MS_Invalidate dem sammenfaller. Påfølgende lesetilganger til det koblede lagringsområdet kan se alle skriver til dokumentets oversatte område som ble gjort allerede før forespørselen. Det er uklart om lesepekerne til lagringsområdene som ble oversatt til det samme området i dokumentet ved bruk av MAP_SHARED selv før du ringer gjennom noen funksjon ville kunne se området. Filens ST_CTIME- og ST_MTIME -kolonner er flagget for oppdatering hvis bruken av MSYNC () -funksjonen resulterer i noen skriveoperasjoner som er utført på katalogen.

Returnert verdi:

  • Msync () funksjon gir 0 hvis den er fullført.
  • Msync () funksjonsutganger -1 og tildeler en errno til en av følgende feilparametere hvis den mislykkes.

Søknadsbruk:

MSYNC () -metoden trenger ikke å være tilgjengelig på alle varianter, siden den bare er tillatt hvis lagringskartlagte dokumenter og koordinerte innkommende og utgående alternativer er gitt. Applikasjoner som trenger et lagringsobjekt for å være i en definert posisjon som de som leverer transaksjonsfasiliteter, må bruke MSYNC () -metoden. Sidene kan overføres til plate under rutinemessig systemaktivitet.

Det er ingen sikkerhet om at Msync () ser ut til å være den eneste faktoren som påvirker om sidene blir overført til plate eller ikke. MSYNC () -metoden sender dataene fra et kartlagt område til basissenhetens vedvarende lagring. Dokumentets integritet av data sikres av forespørselen til Msync (). Hvis MS_Invalidate -flagget på en eller annen måte ble gitt, kan eventuelle lagrede data utløpes når dataene legges inn. På plattformene som ikke gir lese/skrive integritet, er dette nyttig.

Eksempel:

Vi opprettet en ny C -fil ved hjelp av VIM -instruksjonen på skallet. Den er opprettet i prosjekt1 -mappen i vårt Kali Linux -system i henhold til utdataene fra listen “LS” -instruksjonen i følgende bilde, i.e. “Mysync.C ”.

For å åpne denne filen bruker vi VIM -redigereren i henhold til følgende instruksjon:

Den tomme filen åpnes i VIM -redaktøren av systemet vårt. Vi legger til de nødvendige overskriftene i denne kodefilen først. Stdio.H, Unistd.H, og streng.h brukes til å få standardinngang og utgang. Mens bruken av “Sys/mman.h ”og fcntl.h brukes til å bruke msync () -funksjonen og filene i koden. Hoved () -funksjonen initialiserer verdien av filbeskrivelsen til -1 og får sidestørrelsen ved å bruke getPageSize () -funksjonen. Vi åpner “Newfile.txt ”-filen i lese- og skrivemodus. Hvis det ikke er noen fil med dette navnet, oppretter alternativet "O_Create" en ny.

Den returnerte verdien lagres i filbeskrivelsen, og "hvis" -uttalelsen bruker den for å se om verdien er mindre enn 0 eller ikke. I så fall vil det skrive ut at "filåpningen mislyktes". MAP_ADDRESS -pekeren brukes til å kartlegge adressen til en fil, og hvis den mislykkes, vil "hvis" -uttalelsen skrive ut den respektive feilmeldingen. StrcPy () -funksjonen er her for å kopiere en streng til en MAP_ADDRESS-variabel og "IF-Else" -uttalelsen bruker Msync () -funksjonen for å synkronisere det kartlagte minnet til filen og vise den respektive utgangen, i I.e. mislyktes eller lyktes.

Vi samlet denne C -filen med GCC -kompilatoren og opprettet objektfilen. Deretter utførte vi objektfilen og fikk meldingen om at det kartlagte minnet er blitt synkronisert med filen.

Konklusjon

Dette handler om bruken av Msync () 2 -funksjonen til C i vårt system. Vi diskuterte syntaks sammen med parameteren, separat. Vi diskuterte også alternativene som ble brukt i det, og feilene vi kan få fra feilen. Vi la til ett detaljert eksempel for å forklare bruken på C -programmeringsspråket.