Как работает Pipe в Linux
Pipes позволяют межпроцессорное взаимодействие, передавая данные из вывода одного процесса (stdout) во вход другого (stdin).
Они однонаправленные. Данные передаются только в одном направлении — от отправителя к получателю.
Концептуальный поток: процесс A (stdout) -> [PIPE] -> процесс B (stdin).
Анонимные каналы (Anonymous Pipes)
Временный, однонаправленный канал связи между двумя связанными процессами.
Однонаправленный: данные идут только в одном направлении.
Область действия: существуют только во время выполнения процессов.
Создаются программно через системный вызов pipe() или неявно через оператор | в shell-командах:
cat читает файл, затем вывод фильтруется через grep и отфильтрованные строки подсчитываются с помощью wc.
Именованные каналы (Named Pipes / FIFO)
Также известный как FIFO (First In, First Out — первый вошёл, первый вышел). Постоянный канал связи представленный специальным файлов в файловой системе, позволяющий взаимодействовать несвязанным процессам.
Как и анонимные каналы, данные предаются только в одном направлении.
Сохраняются в файловой системе до явного удаления.
Создаются с помощью mkfifo или mknod.
Область действия: могут использоваться между различными сессиями или несвязанными процессами.
Создание именованного канала:
Запись в канал:
Чтение из канала:
Замечание
Анонимные каналы подходят для простых, временных задач, таких как объединение команд.
Именованные каналы лучше использовать для более сложных рабочих процессов, требующих межпроцессорного взаимодействия между несвязанными процессами или сессиями.