Именованные каналы (fifo) имеют четыре следующих преимущества:
(Обновлено, благодаря отзывам Стефана Шазеля )
Итак, одна очевидная задача, которую вы не можете решить с помощью неназванного канала, - это обычное клиент-серверное приложение.
Последний (ошеломленный) пункт выше об однонаправленных каналах имеет отношение к Linux, POSIX (см. popen()
) Говорит, что каналы должны быть только читаемыми или записываемыми , в Linux они являются однонаправленными . См. Понимание ядра Linux (3-е изд. О'Рейли) для деталей, специфичных для Linux (p787). Другие ОС предлагают двунаправленные (безымянные) каналы.
Например, Nagios использует fifo для своего командного файла . Различные внешние процессы (CGI-скрипты, внешние проверки, NRPE и т. Д.) Пишут команды / обновления для этого fifo, и они обрабатываются постоянным процессом Nagios.
Именованные каналы имеют особенности, не похожие на TCP-соединения, но есть важные отличия. Поскольку у fifo есть постоянное имя файловой системы, вы можете писать в него, даже когда нет читателя, по общему признанию, записи будут блокироваться (без асинхронного или неблокирующего ввода / вывода), хотя вы не потеряете данные, если получатель не запущен (или перезапускается).
Для справки см. Также доменные сокеты Unix и ответ на этот вопрос Stackoverflow, в котором кратко описаны основные методы IPC , и этот, в котором говорится оpopen()