Javascript fs.open和#x27之间的差异;rs';flag和fs.openSync
我对此感到困惑,这是我在nodejs.org网站上发现的 它表示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之间有什么区别?区别在于一个函数需要回调。回调被传递给一个低级绑定,因此无论您传递给它的标志是什么,函数都是异步的,因
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)
的手册中阅读更多有关它的信息。