Fcntl i Linux
I Linux -operativsystemet gjøres FCNTL -samtalen gjennom beskrivelsene. For eksempel er en leselås plassert på en lesbar filbeskrivelse, og en lignende sak er for skrivelåsen. En filbeskrivelse representerer filnummeret som åpnes. Det er praktisk for programmet å huske hvilken fil det fungerer med. Når vi åpner en fil, blir nummeret som ikke er tildelt allerede og er gratis gitt til filen i deskriptortabellen i prosessfilen. Og når det gjelder å lukke en fil, fjernes det tildelte nummeret fra prosessens deskriptortabell.
Syntaks
#inkludereFor det første definerer vi FCNTL -biblioteket for å få prosessen til å oppnå lett. Funksjonsanropet inneholder hovedsakelig to argumenter i parameteren. Den ene er beskrivelsen, som definert ovenfor; Den definerer filen som kommandoen for kontroll skal brukes på. Med andre ord, som attributtene må endres. Den andre er kommandoen som brukes på de spesifiserte beskrivelsene.
Hvordan FCNTL endrer filegenskaper
FCNTL -funksjon brukes til fem forskjellige formål, hovedsakelig inkludert duplisering, innstilling av flagg osv.; Hver og en er beskrevet her i detalj.
CMD = F_DUPFD
Dupliser beskrivelsen av filer. Den nye dupliserte verdien returneres til funksjonen. Denne verdien er den laveste som ikke er åpnet allerede eller tildelt noen annen beskrivelse. Det blir alltid tatt som et heltall, og verdien er alltid større enn det tredje argumentet. Videre har den dupliserte verdien sine filbeskrivelsesflagg. Den nye beskrivelsen har samme oppføring i tabellen som den opprinnelige beskrivelsen har.
CMD = getFD
Denne funksjonen har spesialiteten til å returnere flaggene til deskriptoren som funksjonsverdi. Som navnet indikerer, får vi flagget etter å ha satt det.
CMD = SETFD
Som å få flagget, brukes denne funksjonen til å angi flagget til beskrivelsen. Programmet satte flagget til enten 0, ikke lukk på exec, eller på 1, for å lukke på exec.
Cmd = f_getfl
Denne funksjonen returnerer flaggene for filstatus som verdien av en funksjon. Når statusen for flagget beskrives som et åpent flagg, beskriver vi statusflaggene.
Cmd = f_setfl
Det setter statusflagget til filen. Som getfl brukes til å returnere filstatusen.
Cmd = f_getown
Denne funksjonen er relatert til prosessidentiteten når den returnerer prosess -ID og prosessgruppe -ID.
Cmd = f_setown
Denne funksjonen har en tendens til å opprette og angi prosess -ID eller gruppeprosess -ID.
Returverdien fra FCNTL avhenger av kommandoen som brukes. Hvis kommandoer møter en feil, returnerer den -1. Hvis hver funksjon ikke gjennomgår noe problem, blir noen annen verdi unntatt -1 returnert. Mens i tilfelle av F_Getown, kan ID -en som returneres være en positiv verdi eller en negativ verdi.
Nå vil vi legge til noen elementære eksempler her. For å implementere kodene til FCNTL, må du ha en tekstredigerer og Linux -terminal for å få den resulterende verdien.
Eksempel 1
Tenk på et eksempel der vi opprettet og deretter skrev en ny linje i en tekstfil. Dette eksemplet vil ikke bruke involvering av FCNTL som en funksjon. Funksjonens funksjoner vil bare bli implementert i koden ved å bruke et bibliotek.
#inkludereVi vil skrive en streng til koden, så vi må bruke strengbiblioteket. Vi har tatt en rekke filbeskrivelser her. Videre er det tatt en karaktermatrise som er direkte initialisert med en streng med noen tegn. Ved hjelp av filbeskrivelsen vil vi bruke noen filoperasjoner av filflaggstatusen som å lese og skrive i filen osv. Hvis filen allerede er opprettet, må du åpne den og skrive strengen i den.
Fd [0] = åpen ("prøve.txt ", o_rdwr);Denne uttalelsen vil åpne filen som heter 'Eksempelet.txt 'ved å bruke O_RDWR -flagget. Nå for å legge til strengen definerer tidligere, vil den bli lagt inn i filen.
Skriv (FD [0], BF1, Strlen (BUF1));Gjennom lesealternativet vises strengen ved utførelsen av koden fra filen. Begge filbeskrivelsene er stengt på slutten.
Etter å ha lagret filen, vil vi bruke en GCC -kompilator for utførelsen av filen.
$ gcc -o filfil.cNår koden blir utført, vil du se at en streng vises at vi har skrevet i koden til en fil. Denne uttalelsen er hentet fra filen. Når du går til filene i Ubuntu, vil du se prøven.txt -fil. Du vil merke at strengen er skrevet i filen gjennom koden ved å åpne filen.
Eksempel 2
Dette er et eksempel på f_getfl -kommandoen. Det returnerer filstatusflagget som funksjonsverdi. Først åpnes filen; Hvis den ikke allerede er opprettet, vil O_Creat opprette filen; Først er alle disse flaggstatusfunksjonene angitt nedenfor for å gjøre det enkelt å forstå.
O_RDONLY: Denne funksjonen åpner bare filen for leseformålet.
O_WRONLY: Omhandler kun skriveformålet.
O_RDWR: Det er også for lese- og skriveprosessen.
O_Append: Legg til på hver skrivefunksjon på gjeldende fil.
Dette er hovedflagget som brukes i eksemplet. Kommer tilbake til eksemplet, hvis den returnerte verdien ved å åpne filen er mindre enn 0, vises en feilmelding.
Etter åpning må du få filen; Hvis statusen til filen er -1, vises en feilmelding; Ellers vil filstatusen bli mottatt. Nå med hjelp av tilgangsmodus, får vi flagget til filbeskrivelsen. Alle alternativene vil bli sjekket gjennom IF-Else-setningen. Alternativet i henhold til filstatusen vil ha valgt henholdsvis. Til slutt, hvis filbeskrivelsesstatusen er større enn 1, betyr det at filen er lukket nå.
Kompilere koden; Du vil se at alle utsagnene vises i henhold til FD -statusen enten filen åpnes eller lukkes.
Konklusjon
Artikkelen 'C: FCNTL -funksjonsbruk' inneholder funksjonene i FCNTL -funksjonen. Filbeskrivelsen spiller en viktig rolle i filhåndteringsprosessen angående en hvilken som helst funksjon. Vi har brukt noen flaggeksempler også, i tilfelle av lesing og skriving til filen. Begge eksemplene som er forklart her, vil være nyttige for deg i bruken av FCNTL på programmeringsspråket C.