Шта је системски позив у Линуку и како функционише са примерима

What Is System Call Linux



Системски позив је функција која омогућава процесу да комуницира са Линук језгром. То је само програмски начин да рачунарски програм наручи објекат из језгра оперативног система. Системски позиви излажу ресурсе оперативног система корисничким програмима путем АПИ -ја (Апплицатион Программинг Интерфаце). Системски позиви могу приступити само оквиру језгра. Системски позиви су потребни за све услуге којима су потребни ресурси.

Линук кернел је власнички софтвер који се учитава и ради на уређају у најмањој могућој фази. Његов посао је да организује све што се дешава на машини, од тастатуре, диск јединице и мрежних догађаја до обезбеђивања временских исечака за истовремено извршавање различитих програма. Одвајање софтвера и хардвера ствара сигуран мехур који побољшава заштиту и поузданост. Непривилеговане апликације не могу да допру до складишта другог програма, а ако једна не успе, језгро обуставља процес тако да не оштети цео систем.







Танки омотач за плочице:

Системски позиви Линука се у неким програмима не преносе експлицитно кернелу. Скоро сви програми користе основну Ц библиотеку и нуде лаган, али неопходан омот над системским позивима Линука. Спремиште затим обезбеђује пратећи Линук машински позив након што осигура да се параметри функција преведу у десне регистре процесора. Кад год омотач прими податке из системског позива, он их анализира и јасно доприноси програму. Свака машински интерактивна операција у програму се на крају претвара у системски позив. Дакле, погледајмо неке од њих. Постоји дугачак списак Линук системских позива које можемо користити у нашем Линук систему. Ево списка неких уобичајених и најчешће коришћених Линук системских позива.



  • Отвори
  • Близу
  • Екец
  • Пишите
  • читати
  • Лсеек
  • Изаберите

Хајде да разговарамо о неким системским позивима Линука користећи језик Ц у нашем чланку да бисмо се са њима упознали.



Отворите системски позив:

Можемо користити Опен системски позив у нашој дистрибуцији Линука за брзо отварање документа који ћемо навести у коду језика Ц. Прво покрените командни терминал. Можете користити пречицу Цтрл+Алт+Т. Претпоставимо да у почетном директоријуму имате текстуалну датотеку тест.ткт и она садржи одређени садржај. Дакле, у почетку морате креирати нови назив датотеке Ц типа нев.ц у терминалу путем нано уређивача. Стога, испробајте једноставну нано инструкцију испод.





$нанонев.ц

Сада је покренут уређивач Нано. Укуцајте доле приказани код у њега. У коду имамо два дескриптора датотека. Обе датотеке се могу отворити помоћу отвореног системског позива. Први дескриптор садржи позив за читање, а други садржи функцију писања. Први отворени позив је отварање текстуалне датотеке тест.ткт и чување њеног садржаја у дескриптору датотеке фд. Други отворени системски позив ствара датотеку под називом таргет. Циљ документа враћен је у дескриптор датотеке фд1. Упутство за писање се користи за транскрипцију бајтова података у баферу. Додирните Цтрл+С да бисте сачували код и притисните тастер пречице Цтрл+Кс да бисте напустили датотеку.



Покрените инструкцију гцц цомпиле да бисте компајлирали овај Ц код.

$гццнев.ц

Извршимо код помоћу једноставног а.оут упита у љусци на следећи начин:

$./а.оут

Излазни подаци су пренесени на циљ датотеке. Проверимо циљну датотеку користећи цат упит. Излазни екран приказује податке од 20 знакова у циљној датотеци.

$мачкамета

Извршни системски позив:

Системски позив екец се одбацује ради покретања датотеке која се тренутно обрађује. Претходна извршна датотека се замењује, а тренутна датотека ради кад год се позове екец. Коришћењем екец системског позива, можемо претпоставити да ће на тај начин стари документ или апликација у петљи бити замењени свежим. Нови софтвер се користи за поништавање материјала целог процеса. Документ чији је наслов наведен у исказу сваки пут када се позове екец () замењује секцију информација о кориснику која покреће екец () системски позив (). Отворите командни терминал и помоћу нано уређивача креирајте нову датотеку типа Ц на следећи начин:

$наноекп.ц

Уредник је сада отворен. Напишите цео код језика Ц испод. У њу су укључене три главне библиотеке. Након тога, главна функција је инсталирана. Изјава о штампању приказује податке о низу и ИД процеса датотеке екп.ц. У ту сврху је коришћена функција гетпид (). Затим имамо низ типова знакова са неким вредностима у њему. Системски позив екец је коришћен за узимање имена датотеке и једноредног изнад низа као аргумента. Сада ће датотека хелло.ц бити обрађена. Након тога долази још једна изјава за штампање, али она се никада неће извршити. Притисните Цтрл+С да бисте сачували ову датотеку. Притисните Цтрл+Кс за излаз.

Сада је време за креирање још једне ц датотеке, хелло.ц помоћу нано уређивача. Да бисте то урадили, користите доњи упит у љусци.

$наноздраво Ц

Упишите доњи код у њега. Овај код садржи два исписа штампе у главној функцији. Први је само штампање низа који је у њему дат, а други штампање низа док се преузима ИД процеса тренутно коришћене датотеке, а то је хелло.ц.

Хајде да компајлирамо обе датотеке једну за другом помоћу гцц -а.

$гцц–О екп екп.ц

$гцц–О здраво здраво.ц

Када извршимо датотеку екп.ц, она ће исписати прву наредбу за штампање из датотеке екп.ц, а обе линије за штампање из датотеке хелло.ц.

$./екп

Закључак:

Разрадили смо цео концепт Линук системских позива и како се они могу користити у вашем Линук систему. Приликом имплементације овог концепта користили смо Убунту 20.04.