Se você quiser gravar no pipe, somente se houver algum processo que o tenha aberto para leitura, você poderá abri-lo para escrever no modo sem bloqueio.
Com o GNU dd
:
echo Hello | dd oflag=nonblock of=pipe status=none &&
echo message has been sent
E você receberá a mensagem de erro do ENXIO (algo como Nenhum dispositivo ou endereço em inglês) se não houver um leitor.
Observe que ele também falharia (com EWOULDBLOCK
/ EAGAIN
, Recurso temporariamente indisponível ) se o canal estiver cheio (se houver um leitor, mas não estiver lendo no momento e algo como 64KiB já foram escritos para ele).
Observe também que nem toda a mensagem pode ser escrita se não couber. Se você remover o status=none
, verá o quanto foi escrito.