Pokud udělám toto:
x | y
existuje nějaký způsob, jak během běhu x zkontrolovat, zda je připojen k y? Všimněte si, že nevím, co je y, a nejsem odpovědný za spuštění y.
Konkrétně mluvím o běhovém prostředí Node.js, takže možná je to otázka specifická pro Node.js. Ale nakonec mě zajímá, jestli je možné určit vzhledem k nějakému běhu. Je to možné a jak?
Je možné určit, zda jsou stdout/stderr připojeny k stdin jiného procesu? Myslím, že o tom tato otázka je.
Přijatá odpověď:
Chcete-li zkontrolovat, zda výstup programu jde do roury, na základě https://nodejs.org/api/fs.html#fs_class_fs_stats, chcete zavolat fs.fstat(FileDescriptor)
a poté zavolejte isFIFO()
na vráceném stat
objekt (FIFO ==first-in-first-out ==roura nebo pojmenovaná roura):
$ </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
V C byste vytvořili fstat
syscall a poté otestujte .st_mode
pole vráceného struct stat
pomocí S_ISFIFO
makro.
Pokud chcete plýtvat cykly CPU a chcete použít externí binární soubor, můžete spustit test -p /dev/fd/$THE_FD
získat odpověď (nebo ji vyvolat v shellu, kde test
bude vestavěný nebo spusťte stat
nebo spusťte něco jiného, co dokáže určit typ souboru).