1. ホーム
  2. javascript

[解決済み] nodejsでファイルディスクリプターカーソルを巻き戻すことは可能ですか?

2022-02-17 11:36:30

質問

これが私の完璧な世界での行動です。

fs.open('somepath', 'r+', function(err, fd) {
    fs.write(fd, 'somedata', function(err, written, string) {
       fs.rewind(fd, 0) //this doesn't exist
    })
})

これが私の現在の実装です。

return async.waterfall([
    function(next) {
      //opening a file descriptor to write some data
      return fs.open('somepath', 'w+', next)
    }, 
    function(fd, next) {
      //writing the data
      return fs.write(fd, 'somedata', function(err, written, string) {
        return next(null, fd)
      })
    },
    function(fd, next) {
      //closing the file descriptor
      return fs.close(fd, next)
    },
    function(next) {
      //open again to reset cursor position
      return fs.open('somepath', 'r', next)
    }
], function(err, fd) { 
   //fd cursor is now at beginning of the file 
})

を閉じずに、ポジションをリセットしようとしました。 fd を使うことで。

fs.read(fd, new Buffer(0), 0, 0, 0, fn)

が、これでは Error: Offset is out of bounds .

このような恐ろしいことをせずにカーソルをリセットする方法はないのでしょうか? ハック ?

/e: オフセットが範囲外であるエラーは、次の場所で発生します。 この例外 . バッファサイズを1にすれば簡単に直りますが、カーソルの巻き戻しができません。多分、何も読み込まないように関数に要求しているからだと思います。

解決方法は?

今日、その答えは「コアにない」「純粋なjavascriptで追加できない」というものです。

エクステンションがあります ノードエフエスエクスト を追加するものです。 seek 関数で、fdカーソルを移動させることができます。これはC++で行われます ここで .

関連 スタックオーバーフローの質問 .