Tengo este pequeño script de prueba:
rm fooo | cat
mkfifo fooo
echo 'bar' > fooo # blocks here
echo 'done'
Supongo que debido a que no hay nadie leyendo desde la canalización con nombre, la llamada de escritura se bloqueará hasta entonces.
¿Hay alguna forma de escribir incluso si no hay lectores o de comprobar si no hay lectores?
Respuesta1
De acuerdo ahttps://man7.org/linux/man-pages/man7/fifo.7.html:
" En Linux, abrir un FIFO para lectura y escritura tendrá éxito tanto en el modo de bloqueo como en el modo sin bloqueo. POSIX deja este comportamiento sin definir. Esto se puede usar para abrir un FIFO para escribir mientras no hay lectores disponibles. Un proceso que usa ambos extremos de La conexión para comunicarse consigo misma debe tener mucho cuidado para evitar interbloqueos."
Respuesta2
Una solución sería agregar un lector en la misma línea:
echo "unlocked" > "$fifo" > >(read line; echo "$line")
pero no conozco la sintaxis correcta... Todo lo que sé es que necesito abrirlo para leerlo antes de que se bloquee la primera llamada de escritura. Lo anterior no parece funcionar.