LINUX.ORG.RU
решено ФорумAdmin

Как сделать неблокирующую именованную трубу?

 , , ,


0

3

Играюсь с фифо.

Если сделать

mkfifo /tmp/fifo/test && exec 7<> /tmp/fifo/test
то всё ок до тех пор пока не прибьешь сеанс консольки. После это этого попытка записи в пайп echo "test" > /tmp/fifo/test подвешивается до тех пор пока кто-то не начнет из него читать.

Как сделать фифо трубу чтобы в неё всегда можно было писать? Даже если в данный момент никто не читает.

★★★★★

Типа fifo с циклическим буфером, хранящемся на диске? Тоже интересно, подписался на тред. Но если надо вот прям щас - то можно наколхозить с файлом и tail -f

legolegs ★★★★★ ()

Как сделать фифо трубу чтобы в неё всегда можно было писать? Даже если в данный момент никто не читает.

Емнип, никак.
Но, может быть, кто-то знает способ :)

joy4eg ★★★★★ ()
Ответ на: комментарий от joy4eg

Емнип, никак. Но, может быть, кто-то знает способ :)

Думаю тебе нужны скорее очереди(например, SysV) - https://www.softprayog.in/programming/interprocess-communication-using-system...

но можно попробовать выставить размер fifo через fcntl

nihirash ★★★ ()
Последнее исправление: nihirash (всего исправлений: 1)

Вообще, можно накостылить самому, но это работа на пару часиков, влом

anonymous ()

Лет 10-15 назад я смотрел в исходники ядра и там в пайпах и фифо был просто циклический буфер на 1 страницу памяти (обычно 4К). Т.е. никак.

С O_NOBLOCK он и писать ничего не будет, но да, write не заблокируется.

sergej ★★★★★ ()

Подписался, прочел комменты, отписался. Жаль.

deep-purple ★★★★★ ()

Хм, почему-то стандартные ipc утилиты какие-то половинчатые, очистить очередь - можно, а создать сообщение - нет. Пришлось заюзать вот эту штуку. Спасибо nihirash за наводку.

ya-betmen ★★★★★ ()

Постановка задачи не совсем ясна. fifo - first in first out. А вы хотите сокет с логикой. Эти вещи вообще никак не связаны.

Anoxemian ★★★★★ ()
Ответ на: комментарий от Anoxemian

fifo первое что попалось под руку. А хотел я немножко персистентную очередь для баша, желательно сохраняющую порядок сообщений.

ya-betmen ★★★★★ ()

Как сделать фифо трубу чтобы в неё всегда можно было писать?

Загугли linux fifo capacity

no-such-file ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.