Одна причина продолжения использовать однобуквенные опции состоит в том, потому что они могут быть представлены в виде строки вместе: ls -ltr
намного легче ввести, чем ls --sort=time --reverse --format=long
. Существуют неоднократно, когда оба хороши для использования. Что касается поиска этой темы, попробуйте "конвенцию параметров командной строки Unix".
Нет действительно такой вещи как "вызов библиотеки". Можно вызвать функцию, это связано с общей библиотекой. И это просто означает, что путь к библиотеке ищется во времени выполнения для определения местоположения функции для вызова.
Системные вызовы являются низкоуровневыми вызовами ядра, обработанными ядром.
Если Вы вводите man man
в Вашей оболочке Вы будете видеть список ручных разделов
2 Системных вызова (функции, обеспеченные ядром)
3 вызова Библиотеки (функционирует в библиотеках программ),
Например, Вы найдете chmod
в разделе 2 из руководства при вводе man chmod
. И fprintf
в разделе 3.
Системные вызовы обрабатываются непосредственно ядром.
Вызовы библиотеки обработаны динамическим (или статически связаны), библиотека. Программа, выполняющая вызов библиотеки, должна сначала импортировать ту библиотеку, прежде чем вызов будет работать. Сами вызовы библиотеки могут использовать системные вызовы.
Иногда библиотекам предоставляют как "фронтенды" системным вызовам, для обеспечения дополнительной функциональности или простоты использования, не обеспеченной ядром.
Системные вызовы являются функциями, которые операционная система предусматривает приложения для использования. Принимая во внимание, что функции как те в math.h, string.h, и т.д. являются теми, который не имеет никакого отношения к взаимодействию через интерфейс с операционной системой.
В основном есть два режима ядра Linux, а именно.
Любое ядро Linux переключается между этими двумя режимами. Обычно библиотечные вызовы выполняются в пользовательском режиме и системных вызовах ] выполняется в режиме ядра . С точки зрения операционной системы, режим ядра атомарный по своей природе и режим надзора. Почти все вызовы библиотеки нуждаются в помощи ядра для выполнения своих задач. Каждый вызов библиотеки, в свою очередь, вызывает базовый системный вызов. Давайте проясним идею, используя следующий пример
Всякий раз, когда в программе c вы используете fopen () из заголовочного файла. Среда программирования вызывает системный вызов open () из ядра и выполняет задачу открытия файла. Снова после выполнения поток управления возвращается в пользовательский режим.
Чтобы проиллюстрировать это, выполните следующие задачи
man man
: здесь вы найдете разделы руководства с 1 по 8, каждый из которых имеет конкретное назначение. man fopen
: вы увидите respose как FOPEN (3)
, здесь 3 обозначает раздел 3 справочных страниц, который является разделом вызовов c-библиотеки. Сделайте man open
: вы увидите команду respose как OPEN (2)
, здесь 2 указывает раздел 2 справочных страниц, который является разделом системных вызовов.
Надеюсь, вы поняли концепцию.
Просто добавление к различиям, упомянутым здесь в других ответах.
Поскольку вызов библиотеки — это просто вызов функции, переключения из пространства пользователя в пространство ядра не происходит. С другой стороны, системный вызов приводит к переключению из пространства пользователя в пространство ядра, поскольку системный вызов работает в режиме ядра.