Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



Системные вызовы. Введение


Раздел 2 руководства описывает системные вызовы Linux.

Системный вызов - это точка входа в ядро Linux. Как правило, системные вызовы не вызываются напрямую: вместо этого большинство системных вызовов имеют соответствующие функции оболочки библиотеки C, которые выполняют необходимые шаги (например, переход в режим ядра) для выполнения системного вызова.

Таким образом, выполнение системного вызова выглядит так же, как вызов обычной библиотечной функции.

Во многих случаях функция-оболочка библиотеки C больше ничего не делает, кроме:

  • копирование аргументов и уникального номера системного вызова в регистры, где их ожидает ядро;
  • переход в режим ядра, после чего ядро выполняет реальную работу системного вызова;
  • установка errno, если системный вызов возвращает номер ошибки, когда ядро возвращает процессор в пользовательский режим.

    Однако в некоторых случаях функция-оболочка может делать гораздо больше, например, выполнение некоторой предварительной обработки аргументов перед переходом в режим ядра или постобработки значений, возвращаемых системным вызовом.

    В этом случае на страницах руководства в Разделе 2, как правило, делается попытка описать детали как интерфейса API библиотеки C (обычно GNU), так и необработанного системного вызова.

    Чаще всего основное ОПИСАНИЕ будет сфокусировано на интерфейс библиотеки C, а различия для системного вызова будут описаны в разделе ПРИМЕЧАНИЯ.

    Список системных вызовов Linux смотрите в syscalls (2).

    ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

    В случае ошибки большинство системных вызовов возвращают отрицательный номер ошибки, т.е. отрицательное значение одной из констант, описанных в errno (3).

    Оболочка библиотеки C скрывает эту деталь от вызывающего: когда системный вызов возвращает отрицательное значение, оболочка копирует абсолютное значение в переменную errno и возвращает -1 в качестве возвращаемого значения оболочки.

    Значение, возвращаемое успешным системным вызовом, зависит от вызова. Многие системные вызовы возвращают 0 в случае успеха, но некоторые могут возвращать ненулевые значения при успешном вызове. Подробности описаны на соответствующих страницах руководства.

    В некоторых случаях программист должен определить макрос проверки функций, чтобы получить объявление системного вызова из файла заголовка, указанного в разделе SYNOPSIS страницы руководства. При необходимости эти макросы тестирования функций должны быть определены до включения любых файлов заголовков. В таких случаях требуемый макрос описан на странице руководства. Для получения дополнительной информации о макросах тестирования функций см. Feature_test_macros (7).

    Для обозначения UNIX используются определенные термины и сокращения. Варианты и стандарты, которым соответствуют вызовы в этом разделе. См. standards(7).

    Прямой вызов

    В большинстве случаев нет необходимости вызывать системный вызов напрямую, но бывают случаи, когда стандартная библиотека C не реализует для вас удобную функцию-оболочку.

    В этом случае программист должен вручную вызвать системный вызов с помощью syscall (2). Исторически это также было возможно с помощью одного из макросов, описанных в _syscall (2).

    Cмотри также

    _syscall (2) , syscall (2) , syscalls (2) , errno (3) , intro (3) , features (7) , credentials (7) , feature_test_macros (7) , mq_overview (7) , path_resolution (7) , pipe (7) , pty (7) , sem_overview (7) , shm_overview (7) , signal (7) , socket (7) , стандарты (7) , символическая ссылка (7) , system_data_types (7) , sysvipc (7) , время (7)