Co je to systémové volání v Linuxu a jak funguje s příklady

What Is System Call Linux



Systémové volání je funkce, která umožňuje procesu komunikovat s jádrem Linuxu. Je to jen programový způsob, jak si počítačový program může objednat zařízení z jádra operačního systému. Systémová volání zpřístupňují prostředky operačního systému uživatelským programům prostřednictvím rozhraní API (Application Programming Interface). Systémová volání mají přístup pouze k jádru jádra. Systémová volání jsou nutná pro všechny služby, které potřebují prostředky.

Linuxové jádro je proprietární software, který se načítá a funguje na zařízení v nejméně potenciální fázi. Jeho úkolem je organizovat vše, co se děje na počítači, od klávesnice, diskové jednotky a síťových událostí až po poskytování časových úseků pro souběžné spouštění různých programů. Oddělení softwaru a hardwaru vytváří bezpečnou bublinu, která zvyšuje ochranu a spolehlivost. Neprivilegované aplikace se nemohou dostat do úložiště jiného programu, a pokud některý selže, jádro proces pozastaví, aby nepoškodilo celý systém.







Tenký obal na oplatky:

Systémová volání Linuxu nejsou v určitých programech explicitně vykreslena do jádra. Téměř všechny programy používají základní knihovnu C a nabízejí lehký, ale zásadní obal pro volání systému Linux. Úložiště poté poskytuje doprovodné volání počítače Linux po zajištění, že parametry funkce jsou přeloženy do správných registrů procesoru. Kdykoli wrapper přijímá data ze systémového volání, analyzuje je a jasně je přispívá do programu. Jakákoli strojově interaktivní operace v programu je nakonec převedena na systémové volání. Pojďme se tedy podívat na některé z nich. Existuje dlouhý seznam systémových volání systému Linux, která můžeme v našem systému Linux použít. Zde je seznam některých běžných a většinou používaných systémových volání Linuxu.



  • Otevřeno
  • Zavřít
  • Exec
  • Napsat
  • Číst
  • Lseek
  • Vybrat

Pojďme diskutovat o některých systémových voláních Linuxu pomocí jazyka C v našem článku, abychom si s nimi mohli poradit.



Otevřené systémové volání:

K rychlému otevření dokumentu, který specifikujeme v našem kódu jazyka C, můžeme použít systémové volání Open v naší distribuci Linuxu. Nejprve spusťte příkazový terminál. Můžete použít zkratku Ctrl+Alt+T. Předpokládejme, že máte v domovském adresáři textový soubor test.txt, který obsahuje nějaký obsah. Na začátku tedy musíte v terminálu vytvořit nový název souboru typu new.c typu C pomocí editoru nano. Vyzkoušejte proto jednoduché níže uvedené nano instrukce.





$nanonový.c

Nyní byl spuštěn editor Nano. Zadejte do něj níže zobrazený kód. V kódu máme dva deskriptory souborů. Oba soubory lze otevřít pomocí otevřeného systémového volání. První deskriptor obsahuje volání pro čtení a druhý obsahuje funkci zápisu. První otevřené volání je otevření textového souboru test.txt a uložení jeho obsahu do deskriptoru souboru fd. Druhé otevřené systémové volání je vytvoření souboru s názvem target. Cíl dokumentu byl proplacen do deskriptoru souboru fd1. Instrukce zápisu se používá k přepisu bytů dat ve vyrovnávací paměti. Klepnutím na Ctrl+S uložte kód a stisknutím klávesové zkratky Ctrl+X soubor ukončete.



Spusťte příkaz kompilace gcc a zkompilujte tento kód C.

$gccnový.c

Spustíme kód pomocí jednoduchého a.out dotazu v shellu následovně:

$./a.out

Výstupní data byla přenesena do cíle souboru. Zkontrolujme cílový soubor pomocí dotazu kočka. Výstupní obrazovka zobrazuje 20 znakových dat v cílovém souboru.

$kočkacílová

Systémové volání Exec:

Systémové volání exec je přetypováno pro spuštění aktuálně zpracovávaného souboru. Dřívější spustitelný soubor je nahrazen a aktuální soubor je provozován, kdykoli je vyvoláno exec. Pomocí systémového volání exec můžeme předpokládat, že tím přepíšeme starý dokument nebo aplikaci ve smyčce novým. K přepsání materiálu celého procesu se používá nový software. Dokument, jehož název je uveden v příkazu při každém vyvolání exec (), je nahrazen sekcí s informacemi o uživateli, která spouští systémové volání exec (). Otevřete tedy příkazový terminál a pomocí nano editoru vytvořte nový soubor typu C následujícím způsobem:

$nanozk. c

Editor byl nyní otevřen. Napište do něj celý níže uvedený kód jazyka C. Součástí jsou tři hlavní knihovny. Poté byla vytvořena hlavní funkce. Příkaz print zobrazuje data řetězce a ID procesu souboru exp.c. K tomuto účelu byla použita funkce getpid (). Pak tu máme pole typu znak s některými hodnotami. Systémové volání exec bylo použito k převzetí názvu souboru a jednoho řádku nad polem jako argumentu. Nyní bude zpracován soubor hello.c. Poté přichází zatím další tiskový příkaz, který však nebude nikdy proveden. Tento soubor uložte stisknutím Ctrl+S. Ukončete stisknutím Ctrl+X.

Nyní je čas vytvořit další soubor c, hello.c pomocí nano editoru. K tomu použijte níže uvedený dotaz v shellu.

$nanoAhoj C

Napište do něj níže uvedený kód. Tento kód obsahuje dva tiskové příkazy v hlavní funkci. První je pouze tisk řetězce, který je v něm uveden, a druhý tisk řetězce při načítání ID procesu aktuálně používaného souboru, kterým je hello.c.

Pojďme zkompilovat oba soubory jeden po druhém pomocí gcc.

$gcc–O exp exp.c

$gcc–Ahoj ahoj c

Když spustíme soubor exp.c, vydá první tiskový příkaz ze souboru exp.c a oba tiskové řádky ze souboru hello.c.

$./zk

Závěr:

Zpracovali jsme celý koncept systémových volání Linuxu a jejich použití ve vašem systému Linux. Při implementaci tohoto konceptu jsme použili Ubuntu 20.04.