运行这个小脚本告诉我运行时有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)
}
答案 0 :(得分:2)
您可以查看/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的目录是根目录,其他目录是各种形式的特殊文件描述符。我假设节点内部使用两对管道来在线程之间进行通信,因为没有其他进程正在使用它们(使用lsof | grep 656772
进行检查)
当然这并没有告诉你为什么,但它可能是第一个指针。
答案 1 :(得分:0)
如何读取它,因为fs.read返回错误:EISDIR,对目录的非法操作。
应使用fs.readdir