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

У меня есть сценарий, который пишет в именованный канал и другого, который читает из канала. Иногда, при запуске сценария я заметил, что содержание канала существует от предыдущего выполнения сценария. Существует ли способ спугнуть канал в начале сценария?

11
задан User1 27 July 2010 в 22:43
поделиться

3 ответа

Думаю, dd - ваш друг:

dd if=myfifo iflag=nonblock of=/dev/null

strace показывает

open("myfifo", O_RDONLY|O_NONBLOCK)

и действительно даже не блокирует на пустом fifo.

11
ответ дан 3 December 2019 в 08:53
поделиться

Вы можете читать из трубы, пока она не станет пустой. Это эффективно очистит ее.

Прежде чем вы попытаетесь совершить этот дерзкий подвиг, вызовите fcntl(mypipe, F_SETFL, O_NONBLOCK) (я не знаю эквивалента shell-скрипта), чтобы чтение, когда труба пуста, не приводило к зависанию вашей программы.

1
ответ дан 3 December 2019 в 08:53
поделиться

Попробуйте так:

"Открытие FD read/write, а не read-only при настройке трубопровода предотвращает блокировку."

from:

Настройка трубопроводов, читающих из именованных труб без блокировки в bash

1
ответ дан 3 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: