uv_fs_open:Windows 上的标志和模式
uv_fs_open: flags and mode on Windows
从 official documentation 我们得到 uv_fs_open
的以下签名:
int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb);
而且据说相当于open(2)
.
来自我在网上找到的最受认可的tutorial,我们有这个(强调我的):
flags and mode are standard Unix flags. libuv takes care of converting to the appropriate Windows flags.
因此,我认为以下语句对 Linux 和 Windows 都适用:
uv_fs_open(my_loop, my_req, my_filename, O_RDWR | O_CREAT, S_IRWXU, my_callback);
实际上,它在 Linux 上工作得很好。
无论如何,在 Windows 我收到以下错误:
'O_RDWR': undeclared identifier
'O_CREAT': undeclared identifier
'S_IRWXU': undeclared identifier
这是预期的结果吗(因此教程是错误的)?
我应该怎么做才能调用在两个平台上都有效的 uv_fs_open
?
在 Windows 上使用的 flags 和 mode 的值是多少?
要能够在 Windows 上使用 uv_fs_open
,用户必须:
明确包含 fcntl.h
,因为 uv-win.h
不包含它(有关详细信息,请参阅 this 问题)
用_O_CREAT
、_O_RDWR_
等代替O_CREAT
、O_RDWR
等(见官方documentation了解更多详情)
类似的东西适用于 模式 并且可以在链接文档中找到有关可用常量的详细信息。
从 official documentation 我们得到 uv_fs_open
的以下签名:
int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb);
而且据说相当于open(2)
.
来自我在网上找到的最受认可的tutorial,我们有这个(强调我的):
flags and mode are standard Unix flags. libuv takes care of converting to the appropriate Windows flags.
因此,我认为以下语句对 Linux 和 Windows 都适用:
uv_fs_open(my_loop, my_req, my_filename, O_RDWR | O_CREAT, S_IRWXU, my_callback);
实际上,它在 Linux 上工作得很好。
无论如何,在 Windows 我收到以下错误:
'O_RDWR': undeclared identifier
'O_CREAT': undeclared identifier
'S_IRWXU': undeclared identifier
这是预期的结果吗(因此教程是错误的)?
我应该怎么做才能调用在两个平台上都有效的 uv_fs_open
?
在 Windows 上使用的 flags 和 mode 的值是多少?
要能够在 Windows 上使用 uv_fs_open
,用户必须:
明确包含
fcntl.h
,因为uv-win.h
不包含它(有关详细信息,请参阅 this 问题)用
_O_CREAT
、_O_RDWR_
等代替O_CREAT
、O_RDWR
等(见官方documentation了解更多详情)
类似的东西适用于 模式 并且可以在链接文档中找到有关可用常量的详细信息。