Les Syscall i Linux

Les Syscall i Linux

“Som tittelen sier at lesesystemanropet må lese noe fra et bestemt sted. Linux gir oss lesesystemet for å lese data fra hvilken som helst fil og vise dem på konsollen, og kjernen til Linux -systemet skal være involvert i hele denne prosessen, i.e., For å åpne filen, les fra den, skriv data til en annen fil osv. Denne guiden vil være en bonus for hver Linux- og C -bruker som vil lære å bruke lest systemanropet mens du koder. Før vi ser på C -kodebiten, skal vi opprette en tekstfil og en C -fil. Tekstfilen vil inneholde tilfeldige tekstdata som vil bli brukt av lese () -funksjonen. Begge filene er opprettet av den samme "Touch" -forespørselen etter hverandre, og "LS" -spørsmålet viser dem i en hjemmemappe.”

Vi har lagt til 3 linjer med tekst i tekstfilen.txt -fil slik at vi får tilgang til den ved hjelp av lest () -funksjonen til C. Disse 3 linjene vises ved hjelp av "Cat" -spørsmålet.

Eksempel 01

I vårt første eksempel vil vi demonstrere bruken av lest () systemanrop eller POSIX -funksjon for å få tilgang til dataene fra en spesifikk fil og vise dem på konsollen. Eksempelkoden starter med de grunnleggende 3 overskriftsfilene. Stdio.H og Unistd.H -overskrifter brukes til input/output standard mutable funksjoner. Fcntl.H brukes til å bruke POSIX -lese- og skrivefunksjonene for å lage og få tilgang til filene. Utdraget vist nedenfor er startet med erklæringen om en karakterbuffer i størrelse 100. Tekstdataene som er vist i tekstfilen.TXT -fil fra bildet ovenfor vil få tilgang til og vises i biter.

Utskriftsuttalelsen brukes 3 ganger for å gi oss beskjed om antall totale tegn som skal hentes fra filen og vises på konsollen. Tre filbeskrivelser, F1, F2 og F3, brukes separat for å kalle “Open ()” -funksjonen til C for å åpne en TextFile.txt-fil i en skrivebeskyttet modus ved å bruke alternativet “O_RDONLY”. Variablene N1, N2 og N3 brukes til å hente det returnerte resultatet fra å kalle henholdsvis "Les" -funksjonen 3 ganger.

Hver gang har vi gitt den en karaktertypebuffer eller matrise, jeg.e., Arr, en annen filbeskrivelse, i.e., F1, F2, F3 og et annet antall tegn som skal nås fra filen og lagres til Buffer, i.e., 20, 40 og 60 henholdsvis. Hver gang har vi brukt det returnerte resultatet, jeg.e., N1, N2, N3, Innenfor skrive- () -funksjonssamtalen for å få tilgang til buffervariabelen “ARR” med den første parameteren som “1”. Denne skrivefunksjonen vil vise 20, 40 og 60 tegn etter å ha lest fra filteksten.txt inn i karakterbufferen “arr”. Utskriftsuttalelsen har blitt brukt hver gang for å legge til en linjepause med "\ n" i strengområdet.

På denne måten, hver gang, vises noen tekstdata på skallet etter at lesing () -funksjonen får tilgang til den fra filen “TextFile.tekst.”La oss raskt lagre koden vår før samlingen.

#inkludere
#inkludere
#inkludere
int main ()
char arr [100];
printf ("Lese 20 tegn ... \ n");
int f1 = åpen ("textfile.txt ", o_rdonly);
int n1 = les (f1, arr, 20);
skriv (1, arr, n1);
printf ("\ n");
printf ("Leser 40 tegn ... \ n");
Int F2 = Åpne ("TextFile.txt ", o_rdonly);
int n2 = les (f2, arr, 40);
skriv (1, arr, n2);
printf ("\ n");
printf ("Leser 60 tegn ... \ n");
int f3 = åpen ("textfile.txt ", o_rdonly);
int n3 = les (f3, arr, 60);
skriv (1, arr, n3);
printf ("\ n");

Etter sammenstilling av denne koden med "GCC" C -kompilatoren, har vi prøvd "./en.out ”-kommandoen for å kjøre den kompilerte koden. Den viser 20, 40 og 60 tegn fra tekstfilen ved å bruke “Les.”

Eksempel 02

La oss si at du har vist at du har data i en tekstfil.txt -fil, og du vil overføre et nøyaktig antall tegn til en annen fil. For dette vil du bruke lese () -funksjonen for å lese dataene fra kildefilen, og skrivefunksjonen vil bli brukt til å lagre den i destinasjonsfilen.

Nå skal vi bruke de samme overskriftene som vi brukte i eksemplet ovenfor for å lese fra en fil til en buffervariabel. Main () -metoden for denne koden initialiseres med en størrelse 40-tegn-matrise “ARR.”PRINTF () utgangsuttalelser brukes på hvert trinn for å forklare alt i detalj, i.e., Åpningen av en fil, lesing fra en fil, opprette en annen fil, kopiere data fra den første filen til den andre filen, etc. Sammen med det har vi brukt søvn () -funksjonen ved initialiseringen av hvert trinn i dette eksempelkoden. Etter First Sleep () -funksjonen har vi brukt Open () -funksjonen for å åpne filen vår som heter “TextFile.txt ”i en lesemodus og lagre returresultatet til File Descriptor FD1.

I neste trinn skal vi bruke lest () -funksjonen til å lese dataene fra TextFile.txt ved å bruke filbeskrivelsen FD1. Du må merke deg en ting; Vi leser bare de 30 tegnene fra filen og lagrer disse til karakteroppstillingen “ARR.”Hvis lese () -funksjonen fungerer bra, vil den returnere noe suksessnummer til heltallvariabelen“ N.”I det tredje trinnet har vi opprettet en annen fil som heter“ Dest.txt ”ved hjelp av den åpne () -funksjonen igjen.

To alternativer er gitt til den åpne funksjonen i dette trinnet. I det siste trinnet kaster vi av deg Writ () -systemanropet ved å sende den FD2 -filbeskrivelsen, variabelen “N” og bufferarray “ARR” for å kopiere dataene fra bufferen “ARR” til den andre filen ved å bruke F2.

#inkludere
#inkludere
#inkludere
int main ()
char arr [40];
printf ("Åpne tekstfil.txt i skrivebeskyttet modus… \ n ");
søvn (3);
int fd1 = åpen ("textfile.txt ", o_rdonly);
printf ("lesing fra det ... \ n");
søvn (3);
int n = lest (fd1, arr, 30);
printf ("Opprette en annen fil for å skrive i den ... \ n");
søvn (3);
int fd2 = åpen ("dest.txt ", o_creat | o_wronly, 0642);
printf ("Skrive tekstfil.txt data til dest.txt -fil ... \ n ");
søvn (3);
skriv (FD2, arr, n);
printf ("\ n");

På denne kodeutførelsen ble den første filen åpnet, og "arr" -arrayen leste dataene fra den.

Den nye filen ble opprettet i en skrivemodus.

Dataene fra karakteroppstillingen “ARR” sendes til den andre filen.

Dataene på 30 tegn er vellykket kopiert til Dest.txt -fil, som vist nedenfor.

Konklusjon

I denne guiden har vi kort forklart bruken av lest () systemanrop på C -språket. For dette har vi benyttet buffergruppene for å lese data fra en spesifikk fil og vise dem på konsollen. Vi har også brukt LES () -funksjonen og bufferarrayen for å kopiere tekstdata fra en fil til en annen.