2014-01-17 9 views
31

Ich kann nicht mehr über fs.close in Nodejs API erklären. Ich möchte wissen, was der Szenario-Aufruf fs.close notwendig ist. zum Beispiel:Was der Szenario Aufruf fs.close ist notwendig

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

Gibt es Auswirkungen, wenn ich rufe fs.close nicht?

Jede Hilfe wird geschätzt.

Antwort

45

Sie brauchen nicht fs.close nach fs.readFile, fs.writeFile oder fs.appendFile, da sie ein fd (Dateideskriptor) nicht zurück zu verwenden. Diese öffnen die Datei, bearbeiten sie und schließen sie dann für Sie.

Die von fs.createReadStream und fs.createWriteStream zurückgegebenen Datenströme schließen sich, nachdem der Datenstrom endet, können jedoch vorzeitig geschlossen werden. Wenn Sie einen Stream pausiert haben, müssen Sie den Stream schließen, um den zu schließen, oder den Stream fortsetzen und ihn nach dem Aussenden aller Daten beenden.

Aber wenn Sie fs.open oder einen der anderen nennen, die eine fd geben, müssen Sie schließlich fs.close die fd, die Sie gegeben sind.

+2

Können Sie die Strafen beschreiben, die auftreten, wenn Sie 'close()' nicht aufrufen, warum die Garbage Collection dies nicht für Sie erledigt und welche Arten von Programmen/Codes/Mustern tatsächlich Probleme beim Vergessen verursachen würden rufe 'fs.close()' auf? – binki

+0

Was passiert, wenn 'fd' den Gültigkeitsbereich verlässt? Wird es automatisch geschlossen oder nicht? – mpen

+2

@binki, das einen Dateideskriptor nicht schließen kann, wird nicht sofort Probleme verursachen, aber es gibt eine Grenze dafür, wie viele Dateideskriptoren gleichzeitig geöffnet sein können. Wenn Sie also Dateideskriptoren wiederholt öffnen und nicht schließen können, werden Sie schließlich mit einem Fehler "EMFILE: zu viele offene Dateien" konfrontiert. – idbehold