Неблокирующий / асинхронный fifo / именованный канал в оболочке / файловой системе?

Есть ли способ создать неблокируемый / асинхронный именованный канал или что-то подобное в оболочке? Чтобы программы могли помещать в него строки, эти строки оставались бы в оперативной памяти, и когда какая-то программа могла читать некоторые строки из канала, оставляя то, что не читала в fifo? Также очень вероятно, что программы могут одновременно писать и читать на этот fifo. Сначала я подумал, что, возможно, это можно сделать с помощью файлов, но после небольшого поиска в Интернете кажется, что ничего хорошего не может быть получено из-за того, что файл читается и записывается одновременно. Именованные каналы почти сработали бы, просто есть две проблемы: во-первых, они блокируют чтение / запись, если на другом конце никого нет, во-вторых, даже если я разрешаю запись в заблокированный и задаю два процесса для записи в канал, пока никто не читает, пытаясь написать по одной строке для каждого процесса, а затем попытаться head -n 1 <fifo>, я получаю только одну нужную строку, но оба процесса записи завершаются, а вторая строка теряется. Какие-либо предложения?

Редактировать: может быть, какая-то промежуточная программа могла бы помочь с этим, действуя как посредник между писателями и читателями?

10
задан morphles 27 June 2011 в 09:51
поделиться