Systemsamtal

Vad är ett systemanrop i Linux och hur fungerar det med exempel

Vad är ett systemanrop i Linux och hur fungerar det med exempel

Ett systemanrop är en funktion som gör att en process kan kommunicera med Linux-kärnan. Det är bara ett programmatiskt sätt för ett datorprogram att beställa en anläggning från operativsystemets kärna. Systemanrop exponerar operativsystemets resurser för användarprogram via ett API (Application Programming Interface). Systemanrop kan bara komma åt kärnramverket. Systemanrop behövs för alla tjänster som behöver resurser.

Linux-kärnan är egen mjukvara som laddar och fungerar på enheten i minst möjliga skede. Dess uppgift är att organisera allt som händer på maskinen, från tangentbordet, hårddisken och nätverkshändelser till att tillhandahålla tidsskivor för samtidig körning av olika program. Separationen av programvara och hårdvara skapar en säker bubbla som förbättrar skydd och tillförlitlighet. Obehöriga applikationer kan inte nå andra programmets lagring, och om en misslyckas avbryter kärnan processen så att den inte skadar hela systemet.

Wafer Thin Wrapper:

Linux-systemanropen återges inte uttryckligen till kärnan i vissa program. Nästan alla program använder det grundläggande C-biblioteket och erbjuder en lätt men viktig omslag över Linux-systemanropen. Förvaret tillhandahåller sedan det medföljande Linux-maskinsamtalet efter att ha säkerställt att funktionsparametrarna översätts till rätt processorregister. Närhelst omslaget tar emot data från systemanropet analyserar det det och bidrar tydligt till programmet. Varje maskininteraktiv funktion i ett program omvandlas i slutändan till ett systemanrop. Så, låt oss ta en titt på några av dem. Det finns en lång lista över Linux-systemanrop som vi kan använda i vårt Linux-system. Här är listan över några vanliga och mest använda Linux-systemanrop.

Låt oss diskutera några av Linux-systemanropen med C-språket i vår artikel för att få praktisk information om det.

Öppna systemanrop:

Vi kan använda "Öppna" systemanrop i vår Linux-distribution för att snabbt öppna dokumentet, vilket vi kommer att specificera i vår kod för C-språket. Starta kommandoterminalen först. Du kan använda genvägen "Ctrl + Alt + T". Anta att du har en textfil “test.txt ”i hemkatalogen, och den innehåller lite innehåll i den. Så i början måste du skapa ett nytt C-filnamn ”nytt.c ”i terminalen via nano-editor. Prova därför den enkla nanoinstruktionen nedan.

$ nano nytt.c

Nu har Nano-redaktören lanserats. Skriv koden nedan i den. Vi har två filbeskrivare i koden. Båda filerna kan öppnas med det öppna systemanropet. Den första beskrivaren innehåller ett läsanrop och den andra innehåller skrivfunktionen. Det första öppna samtalet öppnar textfilen “test.txt ”och spara dess innehåll i filbeskrivaren“ fd ”. Det andra öppna systemanropet skapar en fil med namnet “target”. Dokumentet "mål" har återbetalats till en "fd1" -filbeskrivare. Skrivinstruktionen används för att transkribera data-byten i bufferten. Tryck på "Ctrl + S" för att spara koden och tryck på genvägsknappen "Ctrl + X" för att avsluta filen.

Kör kompilationsinstruktionen gcc för att kompilera den här C-koden.

$ gcc nytt.c

Låt oss köra koden med det enkla “a.ut ”-frågan i skalet enligt följande:

$ ./ a.ut

Utdata har överförts till filen "target". Låt oss kontrollera "mål" -filen med "katt" -frågan. Utgångsskärmen visar de 20 teckendata i "mål" -filen.

$ kattmål

Exec-systemanrop:

Exec-systemanropet avvisas för att köra en fil som för närvarande behandlas. Den tidigare körbara filen ersätts och den aktuella filen körs när exec anropas. Genom att använda ett exec-systemanrop kan vi anta att detta kommer att skriva över det gamla dokumentet eller applikationen i slingan med ett nytt. Ny programvara används för att åsidosätta hela processens material. Dokumentet vars titel ges i uttalandet när anropande exec () ersätts med användarinformationsavsnittet som kör exec () systemanropet (). Så öppna kommandoterminalen och skapa en ny C-fil med hjälp av nano-redigeraren enligt följande:

$ nano exp.c

Redaktören har öppnats nu. Skriv ut hela C-språkkoden i den. Det finns tre huvudbibliotek som ingår i den. Efter det har huvudfunktionen instanserats. Utskriften har visat strängdata och process-ID för filen "exp.c ”. Funktionen getpid () har använts för detta ändamål. Då har vi en karaktärsuppsättning med några värden i den. Exec-systemanropet har använts för att ta filnamnet och en rad ovanför arrayen som ett argument. Nu är filen “hej.c ”kommer att behandlas. Därefter kommer ännu ett utskriftsuttalande så långt, men det kommer aldrig att utföras. Tryck på “Ctrl + S” för att spara den här filen. Tryck på "Ctrl + X" för att avsluta.

Nu är det dags att skapa en ny c-fil, “hej.c ”med hjälp av nano-redigeraren. Använd frågan nedan i skalet för att göra det.

$ nano hej.c

Skriv koden nedan i den. Den här koden innehåller två utskriftsuttalanden i huvudfunktionen. Den första skriver bara ut en sträng som anges i den, och den andra skriver ut strängen medan man hämtar process-ID för den aktuella filen som är "hej.c ”.

Låt oss kompilera båda filerna efter varandra med gcc.

$ gcc -o exp exp.c

$ gcc -o hej hej.c

När vi utför exp.c-fil, kommer den att skriva ut det första utskriftsuttalandet från exp.c-fil och båda utskriftsraderna från hej.c-fil.

$ ./ exp

Slutsats:

Vi har utarbetat hela konceptet för Linux-systemanrop och hur de kan användas i ditt Linux-system. Vi har använt Ubuntu 20.04 medan detta koncept implementeras.

Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...
Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...