intro - введение в системные вызовы
intro(2)
введение в системные вызовы
ОПИСАНИЕ
В разделе 2 описываются системные вызовы Linux. Системный вызов — это точка
входа в ядро Linux. Обычно, системные вызовы не запускаются напрямую, вместо
этого почти все системные вызовы имеют соответствующие обёрточные функции в
библиотеке C, которая выполняет некоторые действия (например, подготовку к
работе в режиме ядра) для запуска системного вызова. Таким образом, работа с
системным вызовом выглядит также как вызов обычной библиотечной функции.
Во многих случаях обёрточная функция библиотеки C делает не более чем:
копирует аргументы и уникальный номер системного вызова в регистры, где ядро
ожидает их найти, и затем;
передаёт управление в режим ядра в место, где ядро выполняет всю работу
системным вызовом;
изменяет errno, если системный вызов вернул номер ошибки при возврате
ядром ЦП в пользовательский режим.
Однако в некоторых случаях обёрточная функция может делать дополнительную
работу, например, выполнять предварительную обработку аргументов до перехода
в режим ядра и обработку значений, полученных от системного вызова. В этом
случае в справочных страницах раздела 2, обычно, приводятся подробности
программного интерфейса библиотеки C (обычно GNU) и системного вызова. Чаще
всего, в главном ОПИСАНИИ даётся интерфейс библиотеки C, а отличия
системного вызова приводятся в разделе
ЗАМЕЧАНИЯ.
Список системных вызовов Linux можно найти в syscalls(2).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае ошибки большинство системных вызовов возвращает отрицательное число
(т.е., отрицательное значение одной из констант, описанных в
errno(3)). Обёртка в библиотеке C скрывает эту информацию от вызывающей
стороны: когда системный вызов возвращает отрицательное значение, обёртка
копирует абсолютное значение в переменную
errno и возвращает -1 в
качестве результата своей работы.
Значение результата успешной работы системного вызова зависит от
вызова. Многие системные вызовы в этом случае возвращают 0, а некоторые
могут вернуть ненулевое значение. Подробно об этом написано в справочной
странице самого вызова.
В некоторых случаях программист должен определить макрос тестирования
свойств, чтобы получить объявление системного вызова из заголовочного файла,
указанного в справочной странице в разделе СИНТАКСИС. (Где необходимо, эти
макросы тестирования свойств должны быть определены перед включением
какого-либо заголовочного файла.) В таких случаях требуемый макрос описан
в справочной странице. Подробней о макросах тестирования свойств написано в
feature_test_macros(7).
СООТВЕТСТВИЕ СТАНДАРТАМ
Для обозначение вариантов UNIX и разнообразных стандартов, которым
соответствуют системные вызовы, описанные в этом разделе, используются
различные сокращения. См.
standards(7).
ЗАМЕЧАНИЯ
Непосредственный вызов
В большинстве случаев, не требуется запускать системный вызов напрямую, но
иногда в стандартной библиотеке C может не оказаться нужной обёрточной
функции. В этом случае программист должен вручную выполнить системный вызов
с помощью
syscall(2). Исторически, также осталось возможно сделать с
помощью макросов _syscall, описанных в
_syscall(2).
Авторы и условия распространения
Авторы и условия распространения указаны в заголовке исходной справочной
страницы. Заметим, что у разных страниц они могут быть разными! Список
русских переводчиков для каждой страницы можно найти в .po файле в исходном
коде пакета.