这些文件描述符是什么?

运行这个小脚本显示我运行它时有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

http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback