Что такое системный вызов в 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 new.c в терминале через редактор nano. Поэтому попробуйте простую нано-инструкцию ниже.





$наноnew.c

Теперь редактор Nano запущен. Введите в него код, показанный ниже. У нас в коде два файловых дескриптора. Оба файла можно открыть с помощью системного вызова open. Первый дескриптор содержит вызов чтения, а второй - функцию записи. Первый открытый вызов - это открытие текстового файла test.txt и сохранение его содержимого в файловый дескриптор fd. Второй системный вызов open создает файл с именем target. Целевой документ был возмещен файловому дескриптору fd1. Инструкция записи используется для расшифровки байтов данных в буфере. Нажмите Ctrl + S, чтобы сохранить код, и нажмите сочетание клавиш Ctrl + X, чтобы закрыть файл.



Запустите инструкцию компиляции gcc, чтобы скомпилировать этот код C.

$gccnew.c

Давайте выполним код с помощью простого запроса a.out в оболочке следующим образом:

$./а. выход

Выходные данные были переданы в целевой файл. Давайте проверим целевой файл с помощью запроса cat. Экран вывода показывает 20-символьные данные в целевом файле.

$Котцель

Системный вызов Exec:

Системный вызов exec отключается для запуска файла, который в данный момент обрабатывается. Заменяется прежний исполняемый файл, а текущий файл используется всякий раз, когда вызывается exec. Используя системный вызов exec, мы можем предположить, что это приведет к замене старого документа или приложения в цикле новым. Новое программное обеспечение используется для отмены всего материала процесса. Документ, заголовок которого указан в операторе при каждом вызове exec (), заменяется разделом информации о пользователе, который запускает системный вызов exec () (). Итак, откройте командный терминал и, используя редактор nano, создайте новый файл типа C следующим образом:

$наноexp.c

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

Пришло время создать еще один файл c, hello.c, с помощью редактора nano. Для этого воспользуйтесь приведенным ниже запросом в оболочке.

$наноПривет

Напишите в нем приведенный ниже код. Этот код содержит два оператора печати в основной функции. Первый печатает только строку, указанную в нем, а второй печатает строку, извлекая идентификатор процесса текущего используемого файла, которым является hello.c.

Давайте скомпилируем оба файла один за другим с помощью gcc.

$gcc–O exp exp.c

$gcc–O привет hello.c

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

$./exp

Заключение:

Мы подробно рассмотрели всю концепцию системных вызовов Linux и то, как их можно использовать в вашей системе Linux. При реализации этой концепции мы использовали Ubuntu 20.04.