在Node中,文件模式(例如fs.open)定义为in the terms of the POSIX world(三位八进制值)。但是,这并没有映射到Windows的工作方式。 Windows在用户权限和文件系统之间没有这种紧密耦合。 Windows“OpenFile
function甚至没有任何相关参数。但是从我到目前为止收集的内容来看,它们也没有被完全忽略。
是否有关于如何在Windows上使用节点文件模式的任何解释?
答案 0 :(得分:2)
看看the source。看起来他们唯一要做的就是根据文件是否可写来设置FILE_ATTRIBUTE_READONLY。
if (flags & _O_CREAT) {
if (!((req->mode & ~current_umask) & _S_IWRITE)) {
attributes |= FILE_ATTRIBUTE_READONLY;
}
}
关于fs.chmod的说明也很有趣。
/* Todo: st_mode should probably always be 0666 for everyone. We might also
* want to report 0777 if the file is a .exe or a directory.
*
* Currently it's based on whether the 'readonly' attribute is set, which
* makes little sense because the semantics are so different: the 'read-only'
* flag is just a way for a user to protect against accidental deleteion, and
* serves no security purpose. Windows uses ACLs for that.
*
* Also people now use uv_fs_chmod() to take away the writable bit for good
* reasons. Windows however just makes the file read-only, which makes it
* impossible to delete the file afterwards, since read-only files can't be
* deleted.
*
* IOW it's all just a clusterfuck and we should think of something that
* makes slighty more sense.
*
* And uv_fs_chmod should probably just fail on windows or be a total no-op.
* There's nothing sensible it can do anyway.
*/