Jak používat zápis systémového volání do C

How Use Write System Call C



Systémové volání slouží jako primární brána mezi programy a jádrem operačního systému Linux. Ačkoli byste téměř jistě museli mít systémové volání během celé své programovací kariéry v C, ať už se snažíte o výjimečnou produktivitu nebo určitý styl funkcí, úložiště Glibc nebo jiné standardní knihovny, které najdete v populárních distribucích Linuxu, budou stačit pro drtivou většinu vašich požadavky. V této příručce vytvoříme koncept volání systému Write v jazyce C.

Syntax:

#zahrnout

ssize_tnapsat(int fd, const void*buf, size_t count);

V této syntaxi výše zobrazuje první řádek knihovnu pro systémová volání. Na druhém řádku fd znamená deskriptor souboru, což je číslo, které určuje otevřený soubor procesu. Klíčové slovo *buf znamená buffer. Obsahuje všechna data. Další je počítat. Je to počet bajtů, které mají být zapsány do deskriptoru souboru z vyrovnávací paměti.







Instalovat předpoklady:

Chcete -li spustit jakýkoli kód jazyka C, musíte nejprve nainstalovat některé balíčky v distribuci Linuxu. Pokud chcete vidět další informace týkající se systémového volání write, musíte si k tomu nainstalovat balíček manpages-dev. Otevření terminálu pomocí klávesové zkratky Ctrl+Alt+T. Po jeho otevření napište níže uvedený příkaz apt install následovaný klíčovým slovem manpages-dev pro instalaci manpages.



$sudovýstižnýNainstalujtemanpages-dev



Instalace manpages bude nějakou dobu trvat. Počkejte na dokončení.





Po instalaci můžete zobrazit další informace o systémovém volání write pomocí příkazu níže man v shellu.



$muž 2 napsat

Výstupní manuálová stránka pro příkaz write je uvedena níže. Můžete si o tom přečíst informace. Stisknutím q ukončíte manuál.

Nyní je čas nainstalovat balíček Gcc do vašeho systému Linux, aby fungoval v jazyce C. K tomu otevřete shell a napište níže uvedený příkaz apt install následovaný klíčovým slovem gcc.

$sudovýstižnýNainstalujte gcc

Mezitím vás během instalace může požádat o potvrzení této akce instalace stisknutím y pro pokračování a n pro zastavení. Klepněte tedy na klávesu y a stiskněte klávesu Enter.

Nainstaluje se do vašeho systému během několika minut a poslední řádky výstupu budou, jak je znázorněno na následujícím snímku.

Příklady:

Podívejme se na několik příkladů systémového volání pro zápis v naší distribuci Linuxu. Otevřete proto shell příkazového řádku a vytvořte v něm nový soubor C s příponou dot c. Chcete -li jej rychle vytvořit a otevřít, musíte použít níže uvedený příkaz nano. Pojmenovali jsme jej jako new.c.

$nanonový.c

Otevře se následující okno. Nyní musíte do tohoto souboru napsat připojený kód. Do tohoto kódu jsme nejprve zahrnuli knihovnu unistd.h. Poté jsme vytvořili hlavní funkci a v rámci této funkce jsme vytvořili systémové volání pro zápis. V tomto systémovém volání je úplně prvním parametrem deskriptor souboru. V tomto případě celé číslo 1 představuje obrazovku výstupního zařízení a je opraveno. Náš výstup se tedy zobrazí na obrazovce. Druhý parametr zobrazuje data vyrovnávací paměti. Můžete k tomu přidat cokoli. A poslední parametr ukazuje počet čísel pro data uvedená v parametru vyrovnávací paměti. Jak jsme zmínili 5 jako počet, zobrazí pouze prvních 5 bajtů dat vyrovnávací paměti a zbývající bajty ignoruje. Uložte tento kód pomocí klávesové zkratky Ctrl+S a tento soubor ukončete pomocí příkazu Ctrl+X.

#zahrnout

Int hlavní()

{Napsat(1Aqsa Yasin5);}

Nyní v terminálu zkuste níže uvedený příkaz gcc zkompilovat tento nově vytvořený kód s názvem souboru.

$gccnový.c

Podívejme se na tento kód pomocí výchozího souboru a.out vytvořeného za běhu. Vyzkoušejte tedy níže uvedený příkaz a.out a zkontrolujte výstup systémového volání write. Musíme ho použít s ./ pro výběr souboru z aktuálního adresáře.

$./a.out

Výstup, který vidíte, zobrazil pouze slovo Aqsa kvůli počtu 5.

Pojďme trochu změnit náš kód. Změnili jsme počet na 11, protože v našich datech vyrovnávací paměti Aqsa Yasin máme celkem 11 bytů. Tentokrát tedy výstup zobrazí celé bajty řetězcových dat Aqsa Yasin. Uložte tento soubor pomocí Ctrl+S a ukončete jej pomocí klávesové zkratky Ctrl+X.

Zkompilovejme aktualizovaný kód pomocí nově nainstalovaného kompilátoru gcc pro distribuci Linuxu. Zkuste stejný příkaz gcc společně s názvem souboru jako new.c.

$gccnový.c

Nyní zobrazte výstup stejného kódu pomocí předchozího příkazu a.out, jak je uvedeno níže. Výstup ukazuje celý řetězec Aqsa Yasin vyrovnávací paměti.

$./a.out

Podívejme se, jak kód funguje, když vezmeme početní číslo větší než celkový počet bajtů, které data vyrovnávací paměti obsahují. Počítáme tedy jako 30. Uložte a zavřete soubor.

Zkompilovejte stejný aktualizovaný soubor pomocí příkazu gcc jako níže.

$gccnový.c

Nyní spusťte soubor pomocí příkazu a.out a výstup s ním zobrazí data vyrovnávací paměti a také nějakou hodnotu odpadu, jak je zobrazeno ve výstupu snímku níže. $ ./A.out

Můžete také zkontrolovat celkový počet bajtů zapsaných do souboru pomocí níže uvedeného kódu ve stejném souboru.

Zkompilujte kód pomocí instrukce gcc.

$gccnový.c

Výstup ukazuje celkový počet bajtů, včetně dat vyrovnávací paměti a konce řádku, pomocí příkazu a.out.

$./a.out

Závěr:

V tomto kurzu jsme zpracovali koncept pro použití systémového volání Write v jazyce C. Vyzkoušejte všechny příklady, abyste porozuměli myšlence systémového volání write pomocí tohoto článku.