Como escrever algo no pipe nomeado mesmo se não houver leitores

Como escrever algo no pipe nomeado mesmo se não houver leitores

Eu tenho este pequeno script de teste:

rm fooo | cat
mkfifo fooo
echo 'bar' > fooo  # blocks here
echo 'done'

Suponho que, como não há ninguém lendo o canal nomeado, a chamada de gravação será bloqueada até então.

Existe alguma maneira de escrever mesmo que não haja leitores ou de verificar se não há leitores?

Responder1

De acordo comhttps://man7.org/linux/man-pages/man7/fifo.7.html:

"No Linux, abrir um FIFO para leitura e gravação terá sucesso tanto no modo bloqueador quanto no modo não bloqueador. POSIX deixa esse comportamento indefinido. Isso pode ser usado para abrir um FIFO para gravação enquanto não há leitores disponíveis. Um processo que usa ambas as extremidades do a conexão para se comunicar consigo mesma deve ter muito cuidado para evitar impasses."

Responder2

Uma solução seria adicionar um leitor na mesma linha:

 echo "unlocked" > "$fifo" > >(read line; echo "$line")

mas não sei a sintaxe correta para isso ... Tudo o que sei é que preciso abri-lo para leitura antes que a primeira chamada de gravação seja bloqueada. O acima não parece funcionar.

informação relacionada