6

私は、openSync の場合、大きな問題になる可能性があることに気付きました。openSync でファイルを開くと、ファイル記述子が取得されないということです。非同期呼び出しで開く場合にのみ、コールバックへの引数として取得します。問題は、ファイルを閉じるためにファイル記述子が必要なことです! ファイル記述子が必要なファイルに対して、プログラマーが実行したいことが他にもあります。

同期呼び出しを使用して開く場合、非同期モードで開くときにコールバックが返す fd 変数へのアクセスを取得する方法を提供しないことは、node.js の fs API で大幅に省略されているように思われます。これにより、ほとんどのアプリケーションで同期オープンが使用できなくなります。

回避できるのであれば、後で開発中に非同期ファイルのオープンとクローズを使用する必要は本当にありません。同期オープンを使用するときにファイルを正常に閉じるために必要な fd 変数を取得する方法はありますか?

4

1 に答える 1

13

ファイル記述子以外に openFileSync から得られるものは何ですか?

var fs = require('fs')
var path = require('path')
var fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a')
fs.writeSync(fd, 'contents to append')
setTimeout(function () {
  console.log('closing file now')
  fs.closeSync(fd)
}, 10000)

lsof /path/to/log.txt上記のノード スクリプトの実行中に実行し、スクリプトの実行lsof /path/to/log.txt後に再度実行すると、ファイルが正しく閉じられていることがわかります

つまり、ファイルを開いて何を達成しようとしているのですか? おそらく、特定の状況に合わせてストリーミングするなど、より良い方法があるでしょう

于 2013-04-19T14:16:11.377 に答える