2014-01-17 41 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