Hvad er et systemopkald i Linux, og hvordan fungerer det med eksempler

What Is System Call Linux



Et systemopkald er en funktion, der tillader en proces at kommunikere med Linux -kernen. Det er bare en programmatisk måde for et computerprogram at bestille en facilitet fra operativsystemets kerne. Systemopkald udsætter operativsystemets ressourcer for brugerprogrammer via en API (Application Programming Interface). Systemopkald kan kun få adgang til kernerammen. Systemopkald er nødvendig for alle de tjenester, der har brug for ressourcer.

Linux -kernen er proprietær software, der indlæser og fungerer på enheden på det mindst mulige trin. Dens opgave er at organisere alt, hvad der sker på maskinen, fra tastaturet, diskdrevet og netværkshændelser til at levere tidsslices til samtidig udførelse af forskellige programmer. Adskillelsen af ​​software og hardware skaber en sikker boble, der forbedrer beskyttelse og pålidelighed. Uprivilegerede applikationer kan ikke nå et andet programs lagring, og hvis en mislykkes, suspenderer kernen processen, så den ikke skader hele systemet.







Wafer Thin Wrapper:

Linux -systemopkald gengives ikke eksplicit til kernen i visse programmer. Næsten alle programmerne bruger det grundlæggende C -bibliotek og tilbyder en let, men vigtig pakke over Linux -systemopkald. Depotet giver derefter det ledsagende Linux -maskinkald efter at have sikret, at funktionsparametrene oversættes til de rigtige processorregistre. Hver gang wrapper modtager data fra systemopkaldet, analyserer det det og bidrager klart med programmet. Enhver maskininteraktiv operation i et program konverteres i sidste ende til et systemopkald. Så lad os se på nogle af dem. Der er en lang liste over Linux -systemopkald, som vi kan bruge i vores Linux -system. Her er listen over nogle almindelige og mest brugte Linux -systemopkald.



  • Åben
  • Tæt
  • Exec
  • Skrive
  • Læs
  • Lseek
  • Vælg

Lad os diskutere nogle af Linux-systemopkald ved hjælp af C-sproget i vores artikel for at få praktisk erfaring med det.



Åbn systemopkald:

Vi kan bruge det åbne systemopkald i vores Linux -distribution til hurtigt at åbne dokumentet, som vi vil angive i vores kode for C -sprog. Start kommandoterminalen først. Du kan bruge genvejen Ctrl+Alt+T. Antag, at du har en tekstfil test.txt i hjemmemappen, og den indeholder noget indhold i den. Så i begyndelsen skal du oprette et nyt C -filnavn new.c i terminalen via nano -editor. Prøv derfor den enkle nano -instruktion herunder.





$nanony. c

Nu er Nano -editoren lanceret. Indtast nedenstående kode i den. Vi har to filbeskrivelser i koden. Begge filer kan åbnes ved hjælp af det åbne systemopkald. Den første deskriptor indeholder et læseopkald, og den anden indeholder skrivefunktionen. Det første åbne opkald åbner tekstfilen test.txt og gemmer dens indhold i filbeskrivelse fd. Det andet åbne systemopkald opretter en fil med navnet target. Dokumentmålet er blevet refunderet til en fd1 -filbeskrivelse. Skriveinstruktionen bruges til at transskribere bytes af data i bufferen. Tryk på Ctrl+S for at gemme koden, og tryk på genvejstasten Ctrl+X for at afslutte filen.



Kør gcc -kompileringsinstruktionen for at kompilere denne C -kode.

$gccny. c

Lad os eksekvere koden ved hjælp af den enkle a.out -forespørgsel i skallen som følger:

$./a.out

Outputdataene er blevet overført til filmålet. Lad os kontrollere målfilen ved hjælp af katteforespørgslen. Outputskærmen viser dataene på 20 tegn i målfilen.

$katmål

Exec systemopkald:

Exec -systemopkaldet udsendes for at køre en fil, der i øjeblikket behandles. Den tidligere eksekverbare fil erstattes, og den aktuelle fil betjenes, når exec kaldes. Ved at bruge et exec -systemopkald kan vi antage, at det vil overskrive det gamle dokument eller programmet i loop med et nyt. Ny software bruges til at tilsidesætte hele processens materiale. Det dokument, hvis titel er angivet i erklæringen, når der påberåbes exec (), erstattes af brugeroplysningsafsnittet, der kører exec () systemopkald (). Så åbn kommandoterminalen, og brug nano -editoren til at oprette en ny C -fil som følger:

$nanoeksp. c

Redaktøren er åbnet nu. Skriv hele nedenstående C -sprogkode ud i den. Der er tre hovedbiblioteker inkluderet i det. Herefter er hovedfunktionen blevet instantieret. Udskriftserklæringen har vist strengedata og proces -id for filen exp.c. Funktionen getpid () er blevet brugt til dette formål. Så har vi en tegntypearray med nogle værdier i den. Exec-systemopkaldet er blevet brugt til at tage filnavnet og one-line ovenstående array som et argument. Nu vil hello.c -filen blive behandlet. Derefter kommer der endnu en udskrivningserklæring så langt, men den vil aldrig blive eksekveret. Tryk på Ctrl+S for at gemme denne fil. Tryk på Ctrl+X for at afslutte.

Nu er det tid til at oprette en anden c -fil, hello.c ved hjælp af nano -editoren. Brug nedenstående forespørgsel i skallen til at gøre det.

$nanohej. c

Skriv nedenstående kode i den. Denne kode indeholder to udskriftssætninger i hovedfunktionen. Den første udskriver kun en streng, der er angivet i den, og den anden udskriver strengen, mens proces -id'et for den aktuelt anvendte fil hentes, som er hello.c.

Lad os kompilere begge filer efter hinanden ved hjælp af gcc.

$gcc–O eksp. Eksp

$gcc–O hej hej. C

Når vi eksekverer filen exp.c, udsender den den første udskriftsseddel fra filen exp.c og begge udskrivningslinjer fra hello.c -filen.

$./eksp

Konklusion:

Vi har uddybet hele konceptet med Linux -systemopkald, og hvordan de kan bruges i dit Linux -system. Vi har brugt Ubuntu 20.04, mens vi implementerede dette koncept.