Как да използвате Записване на системно обаждане в C

How Use Write System Call C



Системното обаждане служи като основен шлюз между програмите и ядрото на операционната система Linux. Въпреки че почти със сигурност ще трябва да имате системно обаждане през цялата си кариера в програмирането на C, независимо дали се стремите към изключителна производителност или определен стил на функции, хранилището на Glibc или други стандартни библиотеки, намиращи се в популярните дистрибуции на Linux, ще са достатъчни за по -голямата част от вашите изисквания. В това ръководство ще установим концепция за извикването на Системата за запис на език C.

Синтаксис:

#включва

ssize_tпиши(int fd, const void*buf, size_t count);

В горния синтаксис първият ред показва библиотеката за системни повиквания. На втория ред fd означава дескриптор на файл, който наистина е число, което определя отворения файл на процеса. Ключовата дума *buf означава буфер. Това съдържа всички данни в него. Следва броенето. Това е броят байтове, които трябва да бъдат записани във файловия дескриптор от буфера.







Предварителни условия за инсталиране:

За да стартирате всеки код на език C, първо трябва да инсталирате някои пакети в дистрибуцията на Linux. Ако искате да видите допълнителна информация относно системния разговор за запис, трябва да инсталирате пакета manpages-dev, за да го направите. За да отворите терминала с помощта на клавишната комбинация Ctrl+Alt+T. След като го отворите, напишете командата apt install по-долу, последвана от ключовата дума manpages-dev, за да инсталирате manpages.



$sudoподходящИнсталирайmanpages-dev



Инсталирането на страници ще отнеме известно време. Изчакайте да завърши.





След инсталацията можете да видите допълнителната информация за системното обаждане на запис чрез командата man в черупката.



$човек 2 пиши

Изходната man страница за командата write е дадена по -долу. Можете да прочетете информацията за него. Натиснете q, за да излезете от ръководството.

Сега е време да инсталирате пакета Gcc във вашата Linux система, за да работите на език C. За целта отворете черупката и напишете командата apt install по -долу, последвана от ключовата дума gcc.

$sudoподходящИнсталирай gcc

Междувременно по време на инсталацията може да поиска да потвърдите това действие на инсталиране, като натиснете y, за да продължите, и n, за да го спрете. Така че, докоснете клавиша y и натиснете клавиша Enter.

Той ще бъде инсталиран във вашата система в рамките на няколко минути, а последните редове ще бъдат както е показано на снимката по -долу.

Примери:

Нека да дадем някои примери за системно обаждане за запис в нашата дистрибуция на Linux. Затова отворете обвивката на командния ред и създайте в нея нов C файл с разширението dot c. Трябва бързо да използвате командата nano, за да я създадете и отворите. Дадохме му име като new.c.

$нанонов.в

Ще се отвори прозорецът по -долу. Сега трябва да напишете прикрепения код в този файл. В този код първо сме включили библиотека unistd.h. След това създадохме основната функция и в рамките на тази функция създадохме системно обаждане за запис. В това системно обаждане първият параметър е файловият дескриптор. В този случай цяло число 1 представлява екрана на изходното устройство и е фиксирано. Така че нашият изход ще бъде показан на екрана. Вторият параметър показва данните за буфера. Можете да добавите всичко към него. И последният параметър показва броя на данните за данните, дадени в параметъра буфер. Както споменахме 5 като брой на броене, той ще показва само първите 5 байта от буферните данни и ще игнорира оставените байтове. Запазете този код, като използвате клавишната комбинация Ctrl+S и излезте от този файл, като използвате командата Ctrl+X.

#включва

Не е основно()

{Пиши(1Акса Ясин5);}

Сега в терминала опитайте командата gcc по -долу, за да компилирате този новосъздаден код с име на файл.

$gccнов.в

Нека проверим този код, като използваме файла a.out по подразбиране, създаден по време на изпълнение. Така че, опитайте командата a.out по -долу, за да проверите изхода на системното обаждане за запис. Трябва да го използваме с ./, за да изберем файла от текущата директория.

$./a.out

Изходът, който можете да видите, показва думата Aqsa само поради броя 5.

Нека променим малко нашия код. Променихме броя на 11, защото имаме общо 11 байта в нашите буферни данни Aqsa Yasin. Така че този път изходът ще покаже цели байтове от низови данни Aqsa Yasin. Запазете този файл с помощта на Ctrl+S и излезте с помощта на клавишната комбинация Ctrl+X.

Нека компилираме актуализирания код, като използваме новоинсталирания gcc компилатор за дистрибуция на Linux. Опитайте същата команда gcc заедно с името на файл като new.c.

$gccнов.в

Сега покажете изхода на същия код, като използвате предишната команда a.out, както е показано по -долу. Изходът показва пълния низ Aqsa Yasin на буфера.

$./a.out

Нека да видим как работи кодът, когато вземем броя брой по -голям от общия брой байтове, които съдържат буферните данни. И така, използвахме броя като 30. Запазете и затворете файла.

Компилирайте същия актуализиран файл, като използвате командата gcc, както е показано по -долу.

$gccнов.в

Сега изпълнете файла с помощта на командата a.out и изходът ще покаже буферните данни, както и някаква стойност на боклука с него, както е показано в изхода за моментна снимка по -долу. $ ./A.out

Можете също да проверите общия брой байтове, записани във файла, като използвате кода по -долу в същия файл.

Компилирайте кода чрез инструкция gcc.

$gccнов.в

Изходът показва общия брой байтове, включително буферни данни и прекъсване на ред, с помощта на командата a.out.

$./a.out

Заключение:

В този урок ние разработихме концепцията за използване на системно извикване Write в C. Опитайте всички примери, за да разберете идеята за системния разговор за запис, използвайки тази статия.