Системні дзвінки

Що таке системний дзвінок у Linux і як це працює з прикладами

Що таке системний дзвінок у Linux і як це працює з прикладами

Системний виклик - це функція, яка дозволяє процесу взаємодіяти з ядром Linux. Це просто програмний спосіб для комп’ютерної програми замовити об’єкт з ядра операційної системи. Системні дзвінки піддають ресурси операційної системи користувачам програмам через API (інтерфейс програмування програм). Системні виклики можуть отримати доступ лише до основи ядра. Системні дзвінки потрібні для всіх служб, які потребують ресурсів.

Ядро Linux - це власне програмне забезпечення, яке завантажується та працює на пристрої на найменшому потенційному рівні. Його робота полягає в організації всього, що відбувається на машині, від клавіатури, дисковода та мережевих подій до надання часових зрізів для одночасного виконання різних програм. Поділ програмного та апаратного забезпечення створює надійний пакет, що покращує захист та надійність. Непривілейовані програми не можуть отримати доступ до сховища інших програм, і якщо одна не вдається, ядро ​​призупиняє процес, щоб не пошкодити всю систему.

Вафельна тонка обгортка:

Системні виклики Linux не передаються явно ядру в певних програмах. Майже всі програми використовують базову бібліотеку C і пропонують легкий, але важливий обгортку над системними дзвінками Linux. Потім сховище забезпечує супровідний машинний виклик Linux, переконавшись, що параметри функції переведені в потрібні регістри процесора. Щоразу, коли обгортка отримує дані із системного виклику, вона аналізує їх та чітко вносить у програму. Будь-яка машинно-інтерактивна операція в програмі зрештою перетворюється на системний виклик. Отже, давайте розглянемо деякі з них. Існує довгий список системних викликів Linux, які ми можемо використовувати в нашій системі Linux. Ось список деяких поширених і в основному використовуваних системних дзвінків Linux.

Давайте обговоримо деякі системні дзвінки Linux з використанням мови C у нашій статті, щоб налагодити практичну роботу з ним.

Відкритий системний дзвінок:

Ми можемо використовувати системний виклик “Відкрити” в нашому дистрибутиві Linux, щоб швидко відкрити документ, який ми вкажемо в коді мови C. Спочатку запустіть командний термінал. Ви можете використовувати ярлик “Ctrl + Alt + T”. Припустимо, у вас є текстовий файл “тест.txt ”у домашньому каталозі, і він містить певний вміст. Отже, на початку вам слід створити нову назву файлу типу C «новий».c ”у терміналі через редактор nano. Тому спробуйте просту наведену нижче інструкцію нано.

$ нано нові.c

Зараз запущено редактор Nano. Введіть в ньому код, показаний нижче. У коді є два дескриптори файлів. Обидва файли можна відкрити за допомогою відкритого системного дзвінка. Перший дескриптор містить виклик читання, а другий - функцію запису. Перший відкритий дзвінок - це відкриття текстового файлу “test.txt »та збереження його вмісту у файловому дескрипторі« fd ». Другий відкритий системний виклик - це створення файлу з назвою “target”. Документу “ціль” було відшкодовано дескриптор файлу “fd1”. Інструкція запису використовується для транскрипції байтів даних у буфері. Натисніть “Ctrl + S”, щоб зберегти код, і натисніть клавішу швидкого доступу “Ctrl + X”, щоб вийти з файлу.

Запустіть інструкцію компіляції gcc для компіляції цього коду C.

$ gcc новий.c

Давайте виконаємо код, використовуючи просту “a.запит out у оболонці наступним чином:

$ ./ а.назовні

Вихідні дані передано у файл “target”. Давайте перевіримо файл “target” за допомогою запиту “cat”. На екрані виводу відображаються дані з 20 символів у “цільовому” файлі.

$ цільова кішка

Exec System Call:

Системний виклик exec відкидається для запуску файлу, який зараз обробляється. Колишній виконуваний файл підставляється, а поточний файл експлуатується щоразу, коли викликається exec. Використовуючи системний виклик exec, ми можемо припустити, що це призведе до перезапису старого документа або програми в циклі на новий. Нове програмне забезпечення використовується для заміни матеріалу всього процесу. Документ, заголовок якого наводиться у виписці, щоразу, коли викликається exec (), замінюється розділом інформації про користувача, який запускає системний виклик exec () (). Тож відкрийте командний термінал і за допомогою редактора nano створіть новий файл типу C наступним чином:

$ нано досвід.c

Зараз редактор відкрито. Випишіть у ньому цілий код мови нижче. До неї входять три основні бібліотеки. Після цього була створена інстанція головної функції. У операторі print відображаються рядкові дані та ідентифікатор процесу файлу „exp.c ”. Для цього була використана функція getpid (). Тоді ми маємо масив типу символів з деякими значеннями в ньому. Системний виклик exec був використаний, щоб взяти за аргумент ім'я файлу та однорядковий масив над масивом. Тепер файл “привіт.c ”буде оброблено. Після цього ще одна заява на друк надходить, але вона ніколи не буде виконана. Натисніть “Ctrl + S”, щоб зберегти цей файл. Натисніть "Ctrl + X", щоб вийти.

Тепер настав час створити ще один файл c, «привіт.c ”за допомогою редактора nano. Для цього скористайтеся наведеним нижче запитом у оболонці.

$ nano привіт.c

Напишіть в ньому код нижче. Цей код містить два оператори друку в основній функції. Перший - це лише друк рядка, вказаного в ньому, а другий - друк рядка під час отримання ідентифікатора процесу поточно використовуваного файлу, який є "привіт".c ”.

Давайте скомпілюємо обидва файли один за одним за допомогою gcc.

$ gcc -o exp exp.c

$ gcc -o привіт привіт.c

Коли ми виконуємо exp.c, він виведе перший вираз для друку з файлу exp.c і обидва рядки друку з привітання.c файл.

$ ./ досвід

Висновок:

Ми детально розробили всю концепцію системних дзвінків Linux та те, як їх можна використовувати у вашій системі Linux. Ми використовували Ubuntu 20.04 при реалізації цієї концепції.

Top 10 Games to Play on Ubuntu
Windows platform has been one of the dominating platforms for gaming because of the huge percentage of games that are developing today to natively sup...
5 найкращих аркадних ігор для Linux
В наш час комп’ютери - це серйозні машини, що використовуються для ігор. Якщо ви не можете отримати новий високий бал, ви зрозумієте, що я маю на уваз...
Битва за Веснот 1.13.6 Розробка випущена
Битва за Веснот 1.13.6, випущений минулого місяця, є шостим випуском розробки в 1.13.x, і це забезпечує низку вдосконалень, особливо до інтерфейсу кор...