这些文件描述符是什么?
运行这个小脚本显示我运行它时有12个打开的描述符。 我知道0,1,2是stdin,stdout,sterr,但是其他的9和它们为什么都是空的和开放的呢? 此外,fd 9似乎是一个目录,我不知道如何阅读它,因为fs.read返回Error: EISDIR, illegal operation on a directory
。
fs = require('fs') for(var i = 0; i < 1000; i++) { console.log(i,fs.fstatSync(i).size) }
您可以查看/proc/<pid of node process>/fd/
。 (如果你在Linux上)
0 -> /dev/pts/16 1 -> /dev/pts/16 2 -> /dev/pts/16 3 -> pipe:[6567721] 4 -> pipe:[6567721] 5 -> anon_inode:[eventpoll] 6 -> pipe:[6567722] 7 -> pipe:[6567722] 8 -> anon_inode:[eventfd] 9 -> /
所以fd 9的目录是根目录,其他的是各种forms的特殊文件描述符。 我假设两对pipe道被内部节点用来在线程之间进行通信,因为没有其他进程在使用它们(使用lsof | grep 656772
进行检查)
当然这并不能告诉你为什么 ,但它可能是第一个指针。
如何读取它自fs.read返回错误:EISDIR,目录上的非法操作。
应该使用fs.readdir
来读取fs.readdir