Как работает Pipe в Linux

Pipes позволяют межпроцессорное взаимодействие, передавая данные из вывода одного процесса (stdout) во вход другого (stdin).

Они однонаправленные. Данные передаются только в одном направлении — от отправителя к получателю.

Межпроцессорное взаимодействие в Linux

Концептуальный поток: процесс A (stdout) -> [PIPE] -> процесс B (stdin).

Анонимные каналы (Anonymous Pipes)

Временный, однонаправленный канал связи между двумя связанными процессами.

Однонаправленный: данные идут только в одном направлении.

Область действия: существуют только во время выполнения процессов.

Создаются программно через системный вызов pipe() или неявно через оператор | в shell-командах:

gentoo ~ # cat file.txt | grep "keyword" | wc -l

cat читает файл, затем вывод фильтруется через grep и отфильтрованные строки подсчитываются с помощью wc.

Именованные каналы (Named Pipes / FIFO)

Также известный как FIFO (First In, First Out — первый вошёл, первый вышел). Постоянный канал связи представленный специальным файлов в файловой системе, позволяющий взаимодействовать несвязанным процессам.

Как и анонимные каналы, данные предаются только в одном направлении.

Сохраняются в файловой системе до явного удаления.

Создаются с помощью mkfifo или mknod.

Область действия: могут использоваться между различными сессиями или несвязанными процессами.

Создание именованного канала:

gentoo ~ # mkfifo my_pipe

Запись в канал:

gentoo ~ # echo "Hello, World!" > my_pipe &

Чтение из канала:

gentoo ~ # cat < my_pipe

Замечание

Анонимные каналы подходят для простых, временных задач, таких как объединение команд.

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