Jak používat otevřené systémové volání v C

How Use Open System Call C



Systémová volání se v distribucích Linuxu používají k zajištění vstupu do operačního systému Linux a programů. Operační systém Linux používá knihovnu Glibc k podpoře systémových volání v něm při používání jazyka C. Existuje také mnohem více způsobů, jak používat systémová volání. V tomto průvodci článkem budeme diskutovat o otevřeném systémovém volání v systému Linux. K rychlému otevření souboru uvedeného v cestě bylo použito systémové volání Otevřít. Dalo nám to vědět o deskriptoru souboru vytvořeného uživatelem. Používáme Ubuntu 20.04 k získání praktického otevřeného systémového volání.

Nainstalujte si knihovny

Jazyk C vyžaduje, aby byly jako předpoklady nainstalovány některé další balíčky knihoven. Nejprve musíte nainstalovat balíček manpages-dev a zkontrolovat informace týkající se systémových volání. Otevřete terminál příkazového řádku z oblasti aktivit a spusťte níže uvedené pokyny k instalaci manuálových stránek.







$ sudo apt install manpages-dev



Výstup pro dokončení instalace byl uveden níže.







Nyní zkontrolujeme otevřené systémové volání pomocí příkazu man, jak je uvedeno níže.

$ muž2otevřeno



Níže byla zobrazena výstupní manuální stránka pro systémové volání Otevřít. Můžete vidět další informace o tom. Ukončete jej stisknutím tlačítka q.

Výše uvedená syntaxe ukazuje první tři řádky potřebných knihoven, které mají být přidány pro systémová volání. Pro otevřené systémové volání jsou k dispozici tři syntaxe. První syntaxe ukazuje název cesty, což je název souboru, který se má otevřít. Druhý parametr, příznaky, ukazuje režim souboru, např. Čtení nebo zápis. Druhou syntaxi lze použít, pokud soubor neexistuje. Režim parametrů se používá k zobrazení oprávnění k souboru.

Nyní je čas nainstalovat kompilátor GCC pro ladění kódu C v distribuci Linuxu Ubuntu 20.04. Chcete -li to provést, proveďte níže uvedené pokyny v shellu.

$ sudo apt install gcc

Chcete -li pokračovat v instalaci kompilátoru GCC, musíte klepnout na Y, jinak klepnutím na tlačítko n instalaci zavřete. Pokračujte tedy stisknutím tlačítka y a stisknutím klávesy Enter.

Výstup pro dokončení je uveden níže.

Příklad 01

Podívejme se na velmi jednoduchý příklad otevřeného systémového volání. Nejprve ze všeho otevřete příkazový shell a vytvořte nový textový soubor test.txt pomocí jednoduchého dotykového příkazu následujícím způsobem:

$dotektest.txt

Přidejte do něj některá data ručně. Data můžete zobrazit v souboru pomocí níže uvedeného příkazu cat.

$kočkatest.txt

Nyní vytvoříme nový soubor C pomocí příkazu nano v shellu, jak je uvedeno níže.

$nanonový.c

Otevře se níže uvedený soubor GNU nano. Musíte do něj zadat níže uvedený kód jazyka C. Můžete vidět, že jsme přidali potřebné balíčky knihoven pro správné provedení kódu C. Poté jsme definovali hlavní funkci, která bude fungovat na systémovém volání Open. Deklarovali jsme dvě celočíselné proměnné. Proměnná n se používá k počítání hodnot vyrovnávací paměti a fd se používá pro deskriptor souboru. Pole vyrovnávací paměti typu znaků jsme deklarovali jako buf s velikostí 50. Otevřené systémové volání bylo použito ke čtení obsahu ze souboru test.txt a jeho vrácení do deskriptoru souboru. O_RDONLY byl použit pro účely čtení. Další řádek ukazuje načtené systémové volání, které shromáždí 10 bajtů z vyrovnávací paměti a vrátí je do celého čísla n. Příkaz write byl také použit k zápisu dat obsahu nebo vyrovnávací paměti do deskriptoru souboru, což je výstupní obrazovka V našem případě právě teď. Uložte tento soubor pomocí Ctrl+S a zavřete jej pomocí Ctrl+X.

#zahrnout
#zahrnout
#zahrnout
#zahrnout

inthlavní()
{
intn,fd;
charbuf[padesátka];
fd=otevřeno(test.txt,O_RDONLY);
n=číst(fd,buf, 10);
napsat(1 ,buf, 10);

Pojďme nejprve zkompilovat kód C pro otevřené systémové volání pomocí příkazu gcc níže.

$gccnový.c

Nyní je čas zkontrolovat výstup pro kód C pro otevřené systémové volání. V shellu použijeme níže uvedený příkaz a.out. Výstup zobrazí 10 bajtů z obsahu souboru test.txt.

$./na.ven

Ukažme si další příklad na zápis obsahu jednoho souboru do jiného souboru pomocí systémového volání Open. Chcete -li vytvořit nový soubor C pomocí příkazu nano, jak je uvedeno níže.

$ nano novinka.C

Vezměte tedy stejný kód s menší změnou. V kódu jsme definovali další deskriptor souboru jako fd1. Veškerý kód je stejný kromě jednoho dalšího řádku. Druhý poslední řádek kódu použil otevřené systémové volání k vytvoření nového souboru s názvem target pomocí O_CREAT a režimu, pouze pro zápis jako O_WRONLY. 0642 ukazuje oprávnění přiřazená tomuto souboru. A soubor byl vrácen do nového deskriptoru souboru. Další řádek ukázal příkaz k zápisu bytů obsahu do vyrovnávací paměti podle jeho deskriptoru souboru. Uložte soubor a zavřete jej.

Chcete -li ladit soubor jazyka C, spusťte příkaz gcc compile.

$ gcc novinka.C

Chcete -li zobrazit výstup kódu C, zkuste a. Instrukci v shellu, jak je uvedeno níže. Neexistuje žádný výstup, protože výstup byl přesměrován na nově vytvořený cíl souboru.

$./na.ven

Pojďme zkontrolovat data cíle souboru pomocí příkazu cat. Výstup ukazuje, že soubor obsahuje 20 bajtů.

$ kočičí cíl

Závěr

Ve výše uvedeném kurzu jsme vám vysvětlili použití otevřeného systémového volání v jazyce C pomocí kompilátoru gcc. Pomocí různých příkladů vysvětlených v této příručce vás dovede k implementaci požadovaného programu.