Intereting Posts
Почему ls -i медленнее, чем ls? С каким пользователем я должен запускать веб-серверы, redis & mongodb? LXC: Разница в безопасности между корневыми и конечными пользователями, не имеющими привилегированных контейнеров? Восстановление или восстановление файлов из поврежденного раздела F2FS? Что такое нереализованные системные вызовы? Переполнение FIFO FlexCan Почему добавление двоеточия нарушает этот шаблон grep? Установщик Debian, использующий PXE с предварительно заданным config и двумя сетевыми интерфейсами Как заставить awesomewm textclock отражать изменение часового пояса? Как использовать эти разделы для установки fedora 20 Bluejeans на 32-разрядной научной Linux Почему «неправильный» процесс убит? Убедитесь, что $ REPLY находится в диапазоне номеров Как определить, какие файлы были созданы приложением? Почему я не могу загрузиться с моего компакт-диска с обновлением Debian?

Как осуществляется перенаправление?

Является ли перенаправление концепцией оболочки, а не ядром ОС?

Как перенаправление осуществляется с точки зрения системных вызовов?

Переадресация реализована аналогично трубе?

«перенаправление» – это концепция оболочки, а детали вокруг нее зависят от того, о какой оболочке вы говорите.

Хотя, можно сказать, что основой для перенаправления является представление о том, что программы имеют предварительно открытые дескрипторы входных и выходных файлов, когда они начинаются, и это возвращается к тому, как работает функция execve . А именно, что дочерний процесс наследует открытые дескрипторы файлов.

Таким образом, для запуска дочернего элемента (команды) родительский процесс (то есть оболочка) будет первым fork для дочернего элемента, а затем настройте соответствующие концы контуров для ввода и вывода дочернего элемента (дескрипторы файлов 0, 1 и 2) , а затем пусть ребенок наследует их при выполнении через execve .

Да, это трубы.

Для перенаправления я бы предположил, что это (перенаправление) реализуется оболочкой, заменяющей stdin (по вводу для <ввода) и stdout (по выходу для> вывода), используя dup2 () –

  1. открыть файлы для ввода и вывода в = open () out = open ()
  2. dup2 (in, 0) // заменить входной файл на stdin
  3. dup2 (out, 1) // заменить выходной файл на stdout
  4. приближаться)
  5. близко (уходит)
  6. Exec ()

Для трубы трубный (2) системный вызов используется аналогичным образом – у этого есть конец чтения и записи. Каждая команда, которая подключается через трубу, будет считываться с одного конца трубы и записываться на другой конец. stdin, stdout заменит соответствующий конец трубы для этой команды.