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

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

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

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

  • Размер буфера ядра ящика
  • Как программы с программным обеспечением с оболочкой уравновешивают скорость вывода / ввода?
  • отфильтровать определенные процессы и / или pids в ftrace?
  • Какая аппаратная поддержка необходима, чтобы linux выполнял `gettimeofday` /` clock_gettime` в пользовательском пространстве с помощью `hped`?
  • awk системный вызов с инвертированным эффектом
  • Через системы, Как процесс взаимодействует с другим процессом?
  • Интерпретация времени, показанного на strace для открытых системных вызовов
  • 2 Solutions collect form web for “Как осуществляется перенаправление?”

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

    Хотя, можно сказать, что основой для перенаправления является представление о том, что программы имеют предварительно открытые дескрипторы входных и выходных файлов, когда они начинаются, и это возвращается к тому, как работает функция 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 заменит соответствующий конец трубы для этой команды.

    Linux и Unix - лучшая ОС в мире.