这些文件描述符是什么?

时间:2014-10-25 11:38:05

标签: node.js

运行这个小脚本告诉我运行时有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)
}

2 个答案:

答案 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

阅读目录

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