В информатике анонимный канал — это симплексный канал связи FIFO , который может использоваться для одностороннего межпроцессного взаимодействия (IPC). Реализация часто интегрируется в файловую подсистему ввода-вывода операционной системы . Обычно родительская программа открывает анонимные каналы и создает новый процесс, который наследует другие концы каналов, или создает несколько новых процессов и упорядочивает их в конвейер .
Для полнодуплексной (двусторонней) связи обычно требуются два анонимных канала.
Конвейеры поддерживаются в большинстве популярных операционных систем, начиная с Unix и DOS , и создаются с использованием |
символа « » во многих оболочках.
Конвейеры являются важной частью многих традиционных приложений Unix , и их поддержка хорошо интегрирована в большинство Unix-подобных операционных систем. Каналы создаются с помощью pipe
системного вызова , который создает новый канал и возвращает пару файловых дескрипторов, ссылающихся на концы чтения и записи канала. Многие традиционные программы Unix разработаны как фильтры для работы с каналами.
Как и многие другие устройства IO и IPC-средства в API Windows , анонимные каналы создаются и настраиваются с помощью функций API, специфичных для средства IO. В этом случае CreatePipe
используется для создания анонимного канала с отдельными дескрипторами для концов канала чтения и записи. Операции чтения и записи IO на канале выполняются с помощью стандартных функций API средства IO ReadFile
и WriteFile
.
В Microsoft Windows чтение и запись в анонимные каналы всегда блокируются. [1] Другими словами, чтение из пустого канала заставит вызывающий поток ждать, пока не станет доступен хотя бы один байт или не будет получен конец файла в результате закрытия дескриптора записи канала. Аналогично, запись в полный канал заставит вызывающий поток ждать, пока не станет доступно место для хранения записываемых данных. Чтения могут возвращаться с меньшим количеством байтов, чем запрошено (также называется коротким чтением ).
Новые процессы могут наследовать дескрипторы анонимных каналов в процессе создания.
Асинхронные (перекрывающиеся) операции чтения и записи не поддерживаются анонимными каналами.