简体   繁体   中英

uv_fs_open: flags and mode on Windows

From the official documentation we have the following signature for 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);

And it is said that it is equivalent to open(2) .

From the most accredited tutorial I've found on the web, we have this (emphasis mine):

flags and mode are standard Unix flags. libuv takes care of converting to the appropriate Windows flags .

Because of that, I thought that the following statement would have worked both on Linux and Windows:

uv_fs_open(my_loop, my_req,  my_filename, O_RDWR | O_CREAT, S_IRWXU, my_callback);

Actually, it works just fine on Linux.
Anyway, on Windows I receive the following errors:

'O_RDWR': undeclared identifier
'O_CREAT': undeclared identifier
'S_IRWXU': undeclared identifier

Is it the expected result (and thus the tutorial is wrong)?
What should I do to have a call to uv_fs_open that just works on both the platforms?
What are the values for flags and mode to be used on Windows?

To be able to use uv_fs_open on Windows, users have to:

  • include fcntl.h explicitly, because uv-win.h doesn't include it (see this issue for further details)

  • use _O_CREAT , _O_RDWR_ and so on instead of O_CREAT , O_RDWR and the others (see the official documentation for further details)

Something similar applies to the mode and details on the available constants can be found in the linked documentation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM