2014-01-17 42 views
31

我无法在nodejs API中找到更多关于fs.close解释的信息。 我想知道场景调用fs.close是必要的。 例如:需要什么场景调用fs.close

 
var fs = require('fs'); 
fs.writeFile("/home/a.tex","abc"); or like fs.appendFile("/home/a.tex","close") 
fs.close(); //is it necessary? 

是否有任何影响,如果我不叫fs.close?

任何帮助表示赞赏。

回答

45

你并不需要使用fs.closefs.readFilefs.writeFile,或者fs.appendFile因为它们不返回fd(文件描述符)。那些打开文件,对其进行操作,然后关闭它。

fs.createReadStreamfs.createWriteStream在流结束后关闭,但可能提前关闭。如果您暂停了一个数据流,则必须在数据流上调用close关闭fd或恢复数据流,并在发送完所有数据后结束。

但如果调用fs.open或任何其他人的,让一个fd,你最终必须fs.close你被赋予了fd

+2

您可以描述一下当您未能调用close()时出现的处罚,为什么垃圾收集不会为您处理这个问题,以及什么类型的程序/代码/模式会在忘记调用'fs.close()'? – binki

+0

如果'fd'超出范围会发生什么?它会自动关闭还是不关闭? – mpen

+2

@binki无法关闭文件描述符不会立即引起问题,但是一次可以打开多少个文件描述符是有限制的。因此,如果您反复打开并无法关闭文件描述符,则最终会遇到'EMFILE:太多打开的文件'错误。 – idbehold