2014-01-17 2 views
31

nodejs APIでfs.closeの説明が見つかりません。 シナリオコール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? 

はどんな影響がありますか?

何か助けていただければ幸いです。

答えて

45

あなたは、彼らがfd(ファイルディスクリプタ)を返さないfs.closefs.readFilefs.writeFile、またはfs.appendFileとして使用する必要はありません。それらはファイルを開き、それを操作して閉じます。

ストリームが終了した後に閉じるストリームは、fs.createReadStreamおよびfs.createWriteStreamで終了しますが、早期に閉じることがあります。ストリームを一時停止した場合は、ストリーム上でcloseを呼び出してfdを終了するか、ストリームを再開してすべてのデータを放出した後にストリームを終了する必要があります。

あなたがfdを与えるもの他人のfs.openまたはいずれかを呼び出す場合しかし、あなたは最終的にfs.closeあなたが与えられているfdなければなりません。

+2

あなたが 'close()'を呼び出せなかったときのペナルティ、なぜガーベジコレクションがあなたのために処理されないのか、実際に忘れると問題になるプログラム/コード/パターンのタイプ'fs.close()'を呼び出しますか? – binki

+0

'fd'が有効範囲外になるとどうなりますか?それは自動的に閉じるかどうか? – mpen

+2

@binkiがファイルディスクリプタを閉じるのに失敗してもすぐには問題は発生しませんが、一度に開くことができるファイルディスクリプタの数には制限があります。したがって、繰り返し開いてファイル記述子を閉じるのに失敗した場合、最終的に 'EMFILE:オープンファイルが多すぎます'というエラーが表示されます。 – idbehold

関連する問題