6

我注意到对于 openSync 来说可能是一个大问题,即当您使用 openSync 打开文件时,您不会获得文件描述符。如果您使用异步调用打开,则只能将其作为回调的参数。问题是您必须拥有文件描述符才能关闭文件!程序员可能还想对需要文件描述符的文件执行其他操作。

如果您使用同步调用打开,则 node.js 的 fs API 中似乎有一个重大遗漏,即不提供一种方法来访问在异步模式下打开时回调返回的 fd 变量。这实质上会使同步打开对大多数应用程序不可用。

如果可以避免的话,我真的不想在以后的开发中使用异步文件打开和关闭,有没有办法获得使用同步打开时需要成功关闭文件的 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 回答