Какво е системно обаждане в Linux и как работи с примери

What Is System Call Linux



Системното обаждане е функция, която позволява на процес да комуникира с ядрото на Linux. Това е просто програмен начин компютърната програма да поръча съоръжение от ядрото на операционната система. Системните обаждания излагат ресурсите на операционната система на потребителски програми чрез API (Приложен програмен интерфейс). Системните обаждания имат достъп само до рамката на ядрото. Системни обаждания са необходими за всички услуги, които се нуждаят от ресурси.

Ядрото на Linux е патентован софтуер, който зарежда и работи на устройството на най -малко потенциалния етап. Неговата задача е да организира всичко, което се случва на машината, от клавиатурата, дисковото устройство и мрежовите събития до осигуряването на отрязъци за време за едновременно изпълнение на различни програми. Разделянето на софтуер и хардуер създава сигурен балон, който подобрява защитата и надеждността. Непривилегированите приложения не могат да достигнат хранилището на друга програма и в случай на неуспех ядрото спира процеса, така че да не повреди цялата система.







Пластмасова обвивка:

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



  • Отворено
  • Близо
  • Exec
  • Пиши
  • Прочети
  • Lseek
  • Изберете

Нека да обсъдим някои от системните обаждания на Linux, използвайки езика C в нашата статия, за да се справим с него.



Отваряне на системно обаждане:

Можем да използваме системния разговор Open в нашата дистрибуция на Linux, за да отворим бързо документа, който ще посочим в нашия код на език C. Първо стартирайте командния терминал. Можете да използвате прекия път Ctrl+Alt+T. Да предположим, че имате текстов файл test.txt в домашната директория и той съдържа известно съдържание в него. Така че в началото трябва да създадете нов файл тип C нов.c в терминала чрез nano редактор. Затова изпробвайте простата инструкция по -долу nano.





$нанонов.в

Сега е пуснат редакторът Nano. Въведете кода, показан по-долу. В кода имаме два файлови дескриптора. И двата файла могат да бъдат отворени чрез отворено системно обаждане. Първият дескриптор съдържа извикване за четене, а вторият съдържа функцията за запис. Първото отворено обаждане е отваряне на текстовия файл test.txt и запазване на съдържанието му във файловия дескриптор fd. Второто отворено системно обаждане е създаването на файл с име target. Целта на документа е възстановена на дескриптор на файл fd1. Инструкцията за запис се използва за транскрибиране на байтовете данни в буфера. Докоснете Ctrl+S, за да запазите кода, и натиснете клавишната комбинация Ctrl+X, за да излезете от файла.



Изпълнете инструкцията за компилиране на gcc, за да компилирате този C код.

$gccнов.в

Нека изпълним кода, използвайки простата a.out заявка в черупката, както следва:

$./a.out

Изходните данни са предадени на целевия файл. Нека проверим целевия файл, използвайки заявката cat. Изходният екран показва данните от 20 знака в целевия файл.

$коткацел

Exec системно обаждане:

Системното обаждане exec се отхвърля, за да стартира файл, който в момента се обработва. Предишният изпълним файл се заменя, а текущият файл се управлява при всяко извикване на exec. Като използваме системно обаждане exec, можем да приемем, че това ще замени стария документ или приложение в цикъла с нов. Използва се нов софтуер за отмяна на материала на целия процес. Документът, чието заглавие е дадено в израза при всяко извикване на exec (), се заменя с раздела за потребителска информация, който изпълнява exec () системния call (). Така че отворете командния терминал и с помощта на nano редактора създайте нов файл тип C, както следва:

$наноexp.c

Редакторът вече е отворен. Напишете целия по -долу код на език C в него. В него са включени три основни библиотеки. След това основната функция е създадена. Декларацията за печат показва низовите данни и идентификационния номер на процеса на файла exp.c. За тази цел е използвана функцията getpid (). След това имаме масив от тип символи с някои стойности в него. Системното обаждане exec е използвано за приемане на името на файла и едноредовия над масив като аргумент. Сега файлът hello.c ще бъде обработен. След това идва още едно изявление за печат, но никога няма да бъде изпълнено. Натиснете Ctrl+S, за да запазите този файл. Натиснете Ctrl+X, за да излезете.

Сега е време да създадете друг c файл, hello.c с помощта на nano редактора. Използвайте заявката по -долу в черупката, за да направите това.

$наноздравей.c

Напишете кода по -долу в него. Този код съдържа две изявления за печат в основната функция. Първият е само отпечатване на низ, даден в него, а вторият отпечатва низ, докато извлича идентификатора на процеса на използвания в момента файл, който е hello.c.

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

$gcc–O exp exp.c

$gcc–О здравей здравей.c

Когато изпълним файла exp.c, той ще изведе първото изявление за печат от файла exp.c и двата реда за печат от файла hello.c.

$./опит

Заключение:

Разработихме цялата концепция за системните повиквания на Linux и как те могат да бъдат използвани във вашата Linux система. Използвахме Ubuntu 20.04, докато прилагаме тази концепция.