从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,我们有这个(强调我的):
标志和模式是标准的Unix标志。 libuv负责转换为适当的Windows标志。
正因为如此,我认为以下声明在Linux和Windows上都有效:
uv_fs_open(my_loop, my_req, my_filename, O_RDWR | O_CREAT, S_IRWXU, my_callback);
实际上,它在Linux上运行得很好 无论如何,在Windows上我收到以下错误:
'O_RDWR':未声明的标识符
'O_CREAT':未声明的标识符
'S_IRWXU':未声明的标识符
这是预期的结果(因此教程是错误的)?
我该怎么做才能打电话给uv_fs_open
这两个平台上都有效?
在Windows上使用标志和模式的值是什么?
答案 0 :(得分:0)
为了能够在Windows上使用uv_fs_open
,用户必须:
明确包含fcntl.h
,因为uv-win.h
不包括{this问题以获取更多详情)
使用_O_CREAT
,_O_RDWR_
等代替O_CREAT
,O_RDWR
和其他人(有关详细信息,请参阅官方documentation)
类似的内容适用于模式,有关可用常量的详细信息可以在链接文档中找到。