Observe que quando você faz:
cmd > named-pipe
Embora não haja outro processo que tenha o canal aberto para leitura, é o open()
que trava. Esse open()
acima é feito pelo shell, cmd
nem sequer é iniciado, então não terá enviado nenhum dado para ele.
Em vários sistemas como Solaris, AIX ou HP / UX, mas não no Linux, o número de bytes no canal, se instanciado, seria mostrado no campo de tamanho de ls -l
no canal.
Em alguns sistemas (incluindo Linux, veja pipe (7) ), você pode obter o número de bytes em um pipe (chamado ou não) com o FIONREAD
ioctl()
. No entanto, isso deve ser executado em um descritor de arquivo no pipe (para qualquer extremidade), o que significa que, para um pipe nomeado, é necessário abri-lo, o que significa que você pode acabar instanciando o pipe como um efeito colateral (e kill ao fechar).
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &FIONREAD, $n) or die$!;
print unpack "L", $n' <> named-pipe