Wat is een systeemaanroep in Linux en hoe werkt het met voorbeelden?

What Is System Call Linux



Een systeemaanroep is een functie waarmee een proces kan communiceren met de Linux-kernel. Het is gewoon een programmatische manier voor een computerprogramma om een ​​faciliteit te bestellen vanuit de kernel van het besturingssysteem. Systeemaanroepen stellen de bronnen van het besturingssysteem bloot aan gebruikersprogramma's via een API (Application Programming Interface). Systeemaanroepen hebben alleen toegang tot het kernelframework. Systeemaanroepen zijn nodig voor alle services die resources nodig hebben.

De Linux-kernel is propriëtaire software die in het minst potentiële stadium wordt geladen en op het apparaat werkt. Het is zijn taak om alles te organiseren wat er op de machine gebeurt, van het toetsenbord, de schijf en netwerkgebeurtenissen tot het leveren van tijdsegmenten voor gelijktijdige uitvoering van verschillende programma's. De scheiding van software en hardware creëert een veilige bubbel die de bescherming en betrouwbaarheid verbetert. Niet-bevoorrechte toepassingen kunnen de opslag van andere programma's niet bereiken, en als er een faalt, onderbreekt de kernel het proces zodat het niet het hele systeem beschadigt.







Wafel dunne wikkel:

De Linux-systeemaanroepen worden in bepaalde programma's niet expliciet naar de kernel gerenderd. Bijna alle programma's gebruiken de standaard C-bibliotheek en bieden een lichtgewicht maar essentiële wrapper over de Linux-systeemaanroepen. De repository levert vervolgens de bijbehorende Linux-machineaanroep nadat ervoor is gezorgd dat de functieparameters zijn vertaald in de juiste processorregisters. Telkens wanneer de wrapper gegevens van de systeemaanroep ontvangt, analyseert hij deze en draagt ​​deze duidelijk bij aan het programma. Elke machine-interactieve bewerking in een programma wordt uiteindelijk omgezet in een systeemaanroep. Laten we er dus een paar bekijken. Er is een lange lijst met Linux-systeemaanroepen die we in ons Linux-systeem kunnen gebruiken. Hier is de lijst met enkele veelvoorkomende en meest gebruikte Linux-systeemaanroepen.



  • Open
  • Dichtbij
  • directeur
  • Schrijven
  • Lezen
  • Lseek
  • Selecteer

Laten we enkele van de Linux-systeemaanroepen bespreken met behulp van de C-taal in ons artikel om ermee aan de slag te gaan.



Systeemoproep openen:

We kunnen de Open system-aanroep in onze Linux-distributie gebruiken om het document snel te openen, wat we zullen specificeren in onze code van C-taal. Start eerst de opdrachtterminal. U kunt de sneltoets Ctrl+Alt+T gebruiken. Veronderstel dat u een tekstbestand test.txt in de homedirectory heeft en daarin enige inhoud bevat. Dus in het begin moet je een nieuw C-type bestandsnaam new.c in de terminal maken via nano-editor. Probeer daarom de eenvoudige onderstaande nano-instructie uit.





$nanonieuw.c

Nu is de Nano-editor gelanceerd. Typ de hieronder getoonde code erin. We hebben twee bestandsbeschrijvingen in de code. Beide bestanden kunnen worden geopend met behulp van de open systeemaanroep. De eerste descriptor bevat een leesaanroep en de tweede bevat de schrijffunctie. De eerste open oproep is het openen van het tekstbestand test.txt en het opslaan van de inhoud in de bestandsdescriptor fd. De tweede open systeemaanroep is het maken van een bestand met de naam target. Het documentdoel is terugbetaald aan een fd1-bestandsdescriptor. De schrijfinstructie wordt gebruikt om de bytes aan gegevens in de buffer te transcriberen. Tik op Ctrl+S om de code op te slaan en druk op de sneltoets Ctrl+X om het bestand af te sluiten.



Voer de gcc compile-instructie uit om deze C-code te compileren.

$gccnieuw.c

Laten we de code als volgt uitvoeren met behulp van de eenvoudige a.out-query in de shell:

$./a.uit

De uitvoergegevens zijn verzonden naar het bestandsdoel. Laten we het doelbestand controleren met behulp van de cat-query. Het uitvoerscherm toont de gegevens van 20 tekens in het doelbestand.

$katdoelwit

Exec systeemoproep:

De exec-systeemaanroep wordt afgebroken om een ​​bestand uit te voeren dat momenteel wordt verwerkt. Het vorige uitvoerbare bestand wordt vervangen en het huidige bestand wordt gebruikt wanneer exec wordt aangeroepen. Door een exec-systeemaanroep te gebruiken, kunnen we aannemen dat dit het oude document of de toepassing in de lus zal overschrijven met een nieuw. Nieuwe software wordt gebruikt om het materiaal van het hele proces te overschrijven. Het document waarvan de titel wordt gegeven in de instructie wanneer exec() wordt aangeroepen, wordt vervangen door de sectie met gebruikersinformatie die de systeemaanroep exec() uitvoert (). Open dus de opdrachtterminal en maak met behulp van de nano-editor als volgt een nieuw C-type bestand:

$nanoexp.c

De editor is nu geopend. Schrijf de hele onderstaande C-taalcode erin. Er zijn drie hoofdbibliotheken in opgenomen. Daarna is de hoofdfunctie geïnstantieerd. Het print statement toont de string data en de Process Id van het bestand exp.c. Hiervoor is de functie getpid() gebruikt. Dan hebben we een karaktertypearray met enkele waarden erin. De exec-systeemaanroep is gebruikt om de bestandsnaam en de array van één regel hierboven als argument te gebruiken. Nu wordt het bestand hello.c verwerkt. Daarna komt er nog een printopdracht, maar die wordt nooit uitgevoerd. Druk op Ctrl+S om dit bestand op te slaan. Druk op Ctrl+X om af te sluiten.

Nu is het tijd om nog een c-bestand te maken, hello.c, met behulp van de nano-editor. Gebruik hiervoor de onderstaande query in de shell.

$nanohallo.c

Schrijf de onderstaande code erin. Deze code bevat twee printstatements in de hoofdfunctie. De eerste drukt alleen een string af die erin wordt gegeven, en de tweede drukt de string af terwijl de proces-ID van het momenteel gebruikte bestand wordt opgehaald, namelijk hello.c.

Laten we beide bestanden een voor een compileren met gcc.

$gcc–o exp exp.c

$gcc–O hallo hallo.c

Wanneer we het exp.c-bestand uitvoeren, zal het de eerste printopdracht uit het exp.c-bestand en beide printregels uit het hello.c-bestand uitvoeren.

$./exp

Conclusie:

We hebben het hele concept van Linux-systeemaanroepen uitgewerkt en hoe ze in uw Linux-systeem kunnen worden gebruikt. We hebben Ubuntu 20.04 gebruikt tijdens het implementeren van dit concept.