Para verificar se a saída do programa está indo para um canal, com base no link , você deseja ligar para fs.fstat(FileDescriptor)
e, em seguida, chame isFIFO()
no objeto stat
retornado (FIFO == first-in-first-out == um canal ou um pipe nomeado):
$ </dev/null node -e 'var fs=require("fs");
fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); }); '
false
$ : | node -e 'var fs=require("fs");
fs.fstat(0,function(err,stats){ if(err) throw(err); console.log(stats.isFIFO()); }); '
true
Em C, você faria o fstat
syscall e testaria o campo .st_mode
do struct stat
retornado usando a macro S_ISFIFO
.
Se você gosta de desperdiçar ciclos de CPU e quiser usar um binário externo, pode executar test -p /dev/fd/$THE_FD
para obter a resposta (ou invocar isso em um shell onde test
será incorporado, ou executar stat
, ou lançar algo mais capaz de determinar o tipo de arquivo).