これを行う場合:
x | y
xの実行中に、yに接続されているかどうかを確認する方法はありますか? yが何であるかわからないことに注意してください。また、yを開始する責任はありません。
具体的には、Node.jsランタイムについて話しているので、おそらくこれはNode.js固有の質問です。しかし、最終的には、任意のランタイムを決定できるかどうか疑問に思っています。それは可能で、どのようにですか?
stdout / stderrが別のプロセスのstdinに接続されているかどうかを判断することは可能ですか?それがこの質問の内容だと思います。
承認された回答:
https://nodejs.org/api/fs.html#fs_class_fs_statsに基づいて、プログラムの出力がパイプに送られるかどうかを確認するには、fs.fstat(FileDescriptor)
を呼び出します。 次に、isFIFO()
を呼び出します 返されたstat
オブジェクト(FIFO ==先入れ先出し==パイプまたは名前付きパイプ):
$ </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
Cでは、fstat
を作成します syscallしてから、.st_mode
をテストします 返されたstruct stat
のフィールド S_ISFIFO
を使用する マクロ。
CPUサイクルを浪費し、外部バイナリを使用したい場合は、test -p /dev/fd/$THE_FD
を実行できます。 答えを得る(またはtest
のシェルでそれを呼び出す) 組み込みになるか、stat
を実行します 、またはファイルタイプを判別できる他の何かを起動します。