Отношение между системными вызовами и командами/утилитами оболочки

Не очень изящное решение, но работы.

i=5  # Execute 5th command from the beginning of history
`history | sed -n "${i}p" | sed 's/^.\{7\}//'`
2
04.04.2015, 17:14
1 ответ
  1. Часто ли функция системного вызова, но не всегда ли она имеет команду или утилиту в оболочке?

Иногда. Системные вызовы, которые полезно разоблачить, обычно обнажаются. Оболочка, которая не может изменить каталоги, не будет очень полезной оболочкой. Некоторые из них, например chdir, реализованы как сборки оболочки, потому что они могут влиять только на процесс, который их вызвал. Другие реализованы в виде небольших программ. Другие вообще не выставляются: есть очень мало причин вызывать mmap непосредственно из оболочки, так что вы не сможете, если только сами не напишете обертку (что в любом случае было бы бесполезно).

  1. Есть ли какое-то эмпирическое правило о том, какие типы системных вызовов имеют соответствующие команды или утилиты в shell'е, и какие типы команд или утилит в shell'е имеют соответствующие системные вызовы?

Нет никакого стандартного соответствия или эмпирического правила. Имена могут быть чем угодно, например, rm реализована в виде системного вызова unlink; однако есть также команда unlink, которая также делает это, но не имеет большинства опций командной строки и, по сути, является лишь обёрткой. И синтаксис трубки , вместе с соответствующими прочитанными и записью открывается с помощью синтаксиса |.

man syscalls должен дать вам список системных вызовов.

  1. Для системного вызова и соответствующей команды или утилиты оболочки, всегда ли команда или утилита реализована так же, как и системный вызов? Реализация вообще основана на системном вызове?

Утилиты просто используют системные вызовы, на самом деле это единственный способ, которым утилиты могут это делать. Невозможно, скажем, удалить файл или изменить разрешения без прямого или косвенного прохождения через механизм syscall.

(Представьте, каково было бы, если бы это было не так. Каждая программа, которая хотела бы удалить файл, должна была бы реализовать свои собственные драйверы файловой системы и жесткого диска. Также не было бы безопасности, потому что каждая программа отвечала бы за проверку своих собственных разрешений. Вместо этого вы просто используете syscall, а потом ядро все выясняет)

.
3
27.01.2020, 22:05

Теги

Похожие вопросы