Анонимный канал


В информатике анонимный канал — это симплексный канал связи FIFO , который может использоваться для одностороннего межпроцессного взаимодействия (IPC). Реализация часто интегрируется в файловую подсистему ввода -вывода операционной системы . Обычно родительская программа открывает анонимные каналы и создает новый процесс, который наследует другие концы каналов, или создает несколько новых процессов и упорядочивает их в конвейере .

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

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

Как и многие другие средства ввода-вывода устройств и IPC в Windows API , анонимные каналы создаются и настраиваются с помощью функций API, специфичных для средства ввода-вывода. В этом случае CreatePipeиспользуется для создания анонимного канала с отдельными дескрипторами для чтения и записи концов канала. Операции ввода-вывода чтения и записи в канале выполняются с помощью стандартных функций API средства ввода-вывода ReadFileи WriteFile.

В Microsoft Windows чтение и запись в анонимные каналы всегда блокируются. [1] Другими словами, чтение из пустого канала заставит вызывающий поток ждать, пока хотя бы один байт не станет доступным или не будет получен конец файла в результате закрытия дескриптора записи канала. Аналогично, запись в полный канал заставит вызывающий поток ждать, пока не освободится место для хранения записываемых данных. Чтения могут возвращаться с меньшим количеством запрошенных байтов (это также называется коротким чтением ).