Hvordan du bruker readv systemanrop i c

Hvordan du bruker readv systemanrop i c
Readv () System Call Readout Count -segmenter fra dokumentet som deles av dokumentbeskrivelsen FD hekta på vektorens flere buffere. Vektorert I/O er en prosess der et enslig systemanrop skriver mot en vektor av buffere fra en entall flyt av data eller leser fra en vektor av buffere som av en eneste dataflyt. Readv () System Call -metoden ligner på Read (2); Annet enn det fyller det flere buffere. Readv () -systemanrop tilbakestiller totalen av byte som er lest opp når det lykkes; -1 blir tilbakeført i tilfelle en feil. Denne artikkelen vil dekke emnet for readv () systemanrop i Ubuntu 20.04 Linux -system. Sørg for å ha sudo -privilegier for å unngå ulemper.

I starten, logger du inn fra Linux-operativsystemet ditt og åpner kommandolinjekonsollterminalen. Det er to måter å åpne den på. Den første bruker en snarveisnøkkel “Ctrl+Alt+T” mens du er på skrivebordet av Linux -systemet, og den andre bruker aktivitetsområdet. Klikk på Aktivitetsmenylinjen som er fremhevet øverst på venstre hjørne av skrivebordsskjermen. Søkefeltet dukker opp. Trykk på den, og skriv "terminal" i den. Treff nøkkelen “Enter” for å fortsette. Terminalskallet åpnes da. Etter åpningen av konsollterminalen er det på tide å lage en fil som har en "TXT" -type -utvidelse for enkel bruk. Vi kan bruke "berørings" -instruksjonen og navnet på en fil, e.g., test.txt, for å lage den. Trykk på "Enter" -knappen, og det opprettes en fil.

$ berøringstest.tekst

I hjemmekatalogen til Linux -systemet ditt kan du finne den nylig dannede filen “Test.tekst". Dobbeltkobling på den for å åpne den og skrive ut de underpresenterte dataene i den. Lagre den ved å trykke på “Ctrl+S” eller bare klikke på knappen "Lagre". Lukk det etter oppdatering ved hjelp av et kryssskilt på høyre side av filen.

Når du kommer tilbake til terminalen, kan du også sjekke dataene til denne filen ved å bruke en veldig enkel "katt" -kommando som under. Utgangen viser innholdet i filen “Test.tekst".

$ kattest.tekst

For å begynne å jobbe med C -språket, må Linux -systemet ditt ha litt C -språkkompilator i det. For dette må du først installere en kompilator. Vi foreslår å installere “GCC” -kompilatoren ved å bruke “APT” SUDO -kommandoen som nedenfor.

$ sudo apt install GCC

Etter konfigurasjonen av en kompilator, kan du nå jobbe med C -språket riktig. For det første må vi opprette en ny fil med en "C" -typeutvidelse på slutten ved hjelp av Nano Editor. Prøv derfor spørringen nedenfor i konsollen for å gjøre det.

$ nano test.c

Forklaring av kode

Etter at Nano -redaktøren er åpnet, skriver du ut koden for C -språket nedenfor for å bruke Readv -systemanropet i vårt Linux -system. Først av alt har vi brukt bibliotekene nedenfor i C -koden for å være ordentlig og uten feil. Da har vi erklært hovedfunksjonen som vist i SNAP. Helt i starten av hovedfunksjonen, må vi definere to variabler, "i" og "FD". Etter det er tre-karaktertype-matriser eller mindre blitt spesifisert kalt “F1”, “F2” og “F3”. Etter dette har vi erklært en strukturtypeliste eller matrise som heter “IOVEC”. Hver iovec -struktur definerer et fragment, som vil være en individuell usammenhengende buffer. Da har vi laget en annen variabel av typen størrelse som heter “NR”. Etter alle erklæringene har vi spesifisert et enkelt "åpent" systemanrop for å åpne filen "Test.txt ”fra direktøren og leste alt innholdet, og gå tilbake til filbeskrivelsen“ FD ”. Flagget O_rdonly har blitt brukt til leseformål. På neste linje har vi erklært en "if" uttalelse for å sjekke om filbeskrivelsen er lik "-a" eller ikke. Hvis det er "-1", vil det gjennom en feilmelding "åpen" i skallet og returnere 1. Utenfor "hvis" -uttalelsen har vi brukt filbeskrivelsene for å tildele verdier til strukturindeksene. “Iov.base ”er en peker som viser starten på en buffer, og“ iov.Len ”viser den totale størrelsen på bufferen i byte. En vektor ser ut til å være en samling av seksjoner. Hver seksjon av vektoren spesifiserer plasseringen og størrelsen på en bufferbuffer som eller fra hvilke data som kan skrives inn eller leses. På forhånd som går videre til den påfølgende bufferen, dekker Readv () -metoden fullt ut hver eneste av "iov_len" -bytebufferne. Før du faktisk går videre til en annen bufferbuffer, skriver Writev () -metoden fremdeles hele “IOV_LEN” -byte. Fra og med iov [0], tidligere iov [1], og så videre, via iov [grev-1], fungerer begge operasjoner fremdeles på seksjonene i orden. Etter det har vi erklært et "readv" -systemanrop for å lese filbeskrivelsen og "iov" byte -buffere opp til størrelsen på 3.

Så har vi sjekket de returnerte byte. Hvis returverdien er "-1", vil den vise en feilmelding "readv". Vi har brukt "for" -løkken for å skrive ut filtegnene via "iov". Hvis funksjonen er lukket, vil den vise “Close”. Lagre denne koden ved å bruke “Ctrl+S” og avslutte filen ved hjelp av snarveismetoden “Ctrl+X”.

Sett sammen koden ved hjelp av GCC -kommandoen som angitt nedenfor.

$ GCC -test.c

Etter det, kjør utførelseskommandoen for å sjekke resultatene. Utgangen nedenfor viser innholdet i biter og viser også feilmeldingene. Det viser også indeksnummeret for buffergruppen som 0, 1 og 2.

$ ./en.ute

Konklusjon

Vi er ferdige med alle essensielle deler for å intrikat "readv" -systemanropet i Ubuntu 20.04 Linux -system. Alle kommandoene fungerer det samme for andre Linux -distribusjoner.