В каком формате выходные данные по конвейеру отправляются и принимаются от одной команды/программы к другой? [дубликат]

Тяжелый ответ, похоже, состоит в том, чтобы перекомпилировать и sshd, и krb5-libs. Чудо программного обеспечения с открытым исходным кодом.

4
23.09.2018, 15:44
3 ответа

Он идет как битовый поток. Вот как оно отправляется и как оно принимается. Интерфейсами являются файловые дескрипторы(или дескрипторы). Простой файл также обрабатывается таким образом.

См.:

3
27.01.2020, 20:47

./programполучает вывод echoв виде файла, а именно стандартный файл потока /dev/stdin. Демо:

echo foo | wc -c
echo foo | wc -c /dev/stdin

Выходы:

4
4 /dev/stdin

Примечание. :потоковый файл несколько отличается от файла, хранящегося на диске. Мы можем получать доступ к данным случайным образом в обычном файле, но не в потоковом файле. Это как разница между проигрывателем компакт-дисков и радио, играющим песню. На проигрывателе компакт-дисков мы можем перематывать назад, вперед, искать и пропускать песни. Радио просто выводит (или транслирует )то, что вещатель отправляет прямо сейчас .

Где хранится поток? ОС сохраняет его во временном буфере данных , размер которого зависит от ОС. См. Насколько велик буфер канала?


На более низком уровне ОС использует файловые дескрипторы , а не имена файлов. Дескрипторы файлов — это просто стек чисел, для которого каждый идентификатор процесса имеет свой собственный стек. Linux также разрешает доступ к потоку /dev/stdin, (, который всегда является файловым дескриптором "0" ), таким образом:

echo foo | wc -c /proc/self/fd/0

Выход:

4 /proc/self/fd/0

Еще одну абстракцию Linux можно увидеть с realpathутилитой:

realpath /dev/stdin /proc/self/fd/0

Вывод (на текущем терминале в моей системе):

/dev/pts/2
/dev/pts/2

Буквы ptsозначаютP seudo T терминал s. Этот последний номер 2всегда будет варьироваться между терминалами, так что это ненадежное имя,но эти числа можно использовать для таких трюков, как:Как отправить вывод с одного терминала на другой без создания нового канала или файла .

4
27.01.2020, 20:47

Канал — это форма перенаправления (передачи стандартного вывода в другое место назначения ), которое используется в Linux и других Unix-подобных -операционных системах для отправки вывода одной команды/программы/процесса в другая команда/программа/процесс для дальнейшей обработки. Системы Unix/Linux позволяют подключать стандартный вывод команды к стандартному выводу другой команды. Вы можете сделать это, используя символ вертикальной черты «|».

Конвейер используется для объединения двух или более команд, и в этом случае выходные данные одной команды действуют как входные данные для другой команды, а выходные данные этой команды могут действовать как входные данные для следующей команды и так далее. Его также можно представить как временное соединение между двумя или более командами/программами/процессами. Программы командной строки, выполняющие дальнейшую обработку, называются фильтрами.

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

Синтаксис:

command_1 | command_2 | command_3 |.... | command_N 

Пример :Список всех файлов и каталогов и его ввод в команду more.

$ ls -l | more 

Команда moreиспользует вывод ls -lв качестве входных данных. Чистый эффект этой команды заключается в том, что вывод ls -lотображается по одному экрану за раз. Трубы действуют как контейнер, который принимает выходные данные ls -lи передает их moreв качестве входных данных. Эта команда не использует диск для подключения стандартного вывода ls -lк стандартному вводу more, поскольку конвейер реализован в основной памяти. С точки зрения операторов перенаправления ввода/вывода приведенная выше команда эквивалентна следующей последовательности команд.

$ ls -l -> temp
more -> temp (or more temp)
[contents of temp]
rm temp

Еще 1 , 2 , 3

5
27.01.2020, 20:47

Теги

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