javascript - fs.open 'rs' 标志和 fs.openSync 之间的区别

标签 javascript node.js filesystems

我对这个很困惑,我在 document 上找到的在 nodejs.org 中。

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

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

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

fs.openrsfs.openSyncr 有什么区别?

最佳答案

不同之处在于一个函数需要一个回调。回调被传递给低级绑定(bind),因此无论您传递给它的标志如何,该函数都是异步的,因此文档说明标志“不会打开 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);
};

关于javascript - fs.open 'rs' 标志和 fs.openSync 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995980/

相关文章:

node.js - Meteor的远程数据库连接超时和重新连接

php - 不允许加载本地资源 (windows)

c++ - 哪些 API 可用于在 Windows 文件系统上创建驱动器?

javascript - 在 JavaScript 中将数据转换为 OHLC(开盘价、最高价、最低价、收盘价)?

javascript - 让 jquery 使用十进制选项值

javascript - (NodeJS + Express) 服务器未从 html 读取链接的 javascript 文件

filesystems - 在负载平衡服务器之间同步 Web 目录

javascript - 使用 Jasmine 对过滤器组件进行单元测试

javascript - CSS :not selector act strangely on section tag

javascript - 传递参数以构建 JSON 对象