Jika saya melakukan ini:
x | y
apakah ada cara untuk memeriksa, selama runtime x, untuk melihat apakah itu terhubung ke y? Perhatikan bahwa saya tidak tahu apa itu y, dan saya tidak bertanggung jawab untuk memulai y.
Secara khusus, saya berbicara tentang runtime Node.js, jadi mungkin ini adalah pertanyaan spesifik Node.js. Tetapi pada akhirnya, saya bertanya-tanya apakah mungkin untuk menentukan runtime yang diberikan. Apakah mungkin dan bagaimana caranya?
Apakah mungkin untuk menentukan apakah stdout/stderr terhubung ke stdin dari proses lain? Saya rasa itulah yang dimaksud dengan pertanyaan ini.
Jawaban yang Diterima:
Untuk memeriksa apakah keluaran program akan menjadi pipa, berdasarkan https://nodejs.org/api/fs.html#fs_class_fs_stats, Anda ingin memanggil fs.fstat(FileDescriptor)
lalu panggil isFIFO()
pada stat
yang dikembalikan objek (FIFO ==first-in-first-out ==pipa atau pipa bernama):
$ </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
Di C, Anda akan membuat fstat
syscall dan kemudian uji .st_mode
bidang dari struct stat
yang dikembalikan menggunakan S_ISFIFO
makro.
Jika Anda ingin membuang siklus CPU dan ingin menggunakan biner eksternal, Anda dapat menjalankan test -p /dev/fd/$THE_FD
untuk mendapatkan jawabannya (atau panggil itu di shell tempat test
akan menjadi bawaan, atau jalankan stat
, atau luncurkan sesuatu yang lain yang mampu menentukan jenis file).