Javascript fs.open和#x27之间的差异;rs';flag和fs.openSync

Javascript fs.open和#x27之间的差异;rs';flag和fs.openSync,javascript,node.js,filesystems,Javascript,Node.js,Filesystems,我对此感到困惑,这是我在nodejs.org网站上发现的 它表示fs.open()中的rs标志用于在同步模式下打开文件进行读取 它只是让我觉得这是一个异步文件打开,但它正在进行同步读取?我真的对这一点感到困惑 在此之后,它注意到这不会将fs.open()转换为同步阻塞调用。如果这是您想要的,那么您应该使用fs.openSync() fs.open的rs和fs.openSync的r之间有什么区别?区别在于一个函数需要回调。回调被传递给一个低级绑定,因此无论您传递给它的标志是什么,函数都是异步的,因

我对此感到困惑,这是我在nodejs.org网站上发现的

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

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

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


fs.open
rs
fs.openSync
r
之间有什么区别?

区别在于一个函数需要回调。回调被传递给一个低级绑定,因此无论您传递给它的标志是什么,函数都是异步的,因此文档说明该标志“不会将
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);
};

thx,我知道了,但我仍然对
fs中的
'rs'
标志感到困惑。open
打开文件以便在同步模式下读取
。因为它让我觉得这是一个
异步文件打开
,但它在做一个
同步读取
?我对这一点真的很困惑。
rs
标志告诉操作系统同步打开文件,但函数使用回调操作,因此,它仍然是一个异步函数。@Hexa氰在
fs.open
?@RyderBrooks中使用
rs
标志的用例是什么?@RyderBrooks当您希望确保读/写操作在返回之前直接发送到文件系统,并且不缓存或排队等待完成时,它会很有用。例如,当您正在向共享网络文件系统写入文件,并且需要文件系统的其他读写器保持一致性时,这可能非常有用。在Linux上,这将设置
O_SYNC
选项,因此您可以在
open(2)
的手册中阅读更多有关它的信息。