У меня есть сценарий, который пишет в именованный канал и другого, который читает из канала. Иногда, при запуске сценария я заметил, что содержание канала существует от предыдущего выполнения сценария. Существует ли способ спугнуть канал в начале сценария?
Думаю, dd
- ваш друг:
dd if=myfifo iflag=nonblock of=/dev/null
strace показывает
open("myfifo", O_RDONLY|O_NONBLOCK)
и действительно даже не блокирует на пустом fifo.
Вы можете читать из трубы, пока она не станет пустой. Это эффективно очистит ее.
Прежде чем вы попытаетесь совершить этот дерзкий подвиг, вызовите fcntl(mypipe, F_SETFL, O_NONBLOCK)
(я не знаю эквивалента shell-скрипта), чтобы чтение, когда труба пуста, не приводило к зависанию вашей программы.
Попробуйте так:
"Открытие FD read/write, а не read-only при настройке трубопровода предотвращает блокировку."
from:
Настройка трубопроводов, читающих из именованных труб без блокировки в bash