fs.open'rs'flag和fs.openSync之间的区别

时间:2013-09-25 04:01:28

标签: javascript node.js filesystems

我对此感到困惑,我在nodejs.org的document找到了。

它表示rs中的fs.open()标志用于打开文件以便以同步模式进行读取。

它只是让我觉得这是一个异步文件打开但它正在进行同步读取?我真的很困惑这一点。

之后,它注意到此未将fs.open()变为同步阻止调用。如果这是您想要的,那么您应该使用fs.openSync()

fs.open的{​​{1}}和rs的{​​{1}}有什么区别?

1 个答案:

答案 0 :(得分:4)

不同之处在于一个函数需要回调。回调被传递给低级绑定,因此无论您传递给它的标志如何,该函数都将是异步的,因此文档说明标志“不会将fs.open()变为同步阻塞调用“。举个例子:

var fs = require('fs');
var file = './file';

// fd will always be defined
var fd = fs.openSync(file, 'r');

// fd is undefined because the function returns a
// binding, and the actually fs is passed in a callback
var fd = fs.open(file, 'rs');

如果我们不将回调传递给异步函数,则该方法的结构不会返回结果文件描述符。这就是两个函数的来源:

fs.open = function(path, flags, mode, callback) {
  callback = makeCallback(arguments[arguments.length - 1]);
  mode = modeNum(mode, 438 /*=0666*/);

  if (!nullCheck(path, callback)) return;
  binding.open(pathModule._makeLong(path), stringToFlags(flags), mode, callback);
};

fs.openSync = function(path, flags, mode) {
  mode = modeNum(mode, 438 /*=0666*/);
  nullCheck(path);
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
};