Blame docs/src/fs.rst

Packit Service 7c31a4
Packit Service 7c31a4
.. _fs:
Packit Service 7c31a4
Packit Service 7c31a4
File system operations
Packit Service 7c31a4
======================
Packit Service 7c31a4
Packit Service 7c31a4
libuv provides a wide variety of cross-platform sync and async file system
Packit Service 7c31a4
operations. All functions defined in this document take a callback, which is
Packit Service 7c31a4
allowed to be NULL. If the callback is NULL the request is completed synchronously,
Packit Service 7c31a4
otherwise it will be performed asynchronously.
Packit Service 7c31a4
Packit Service 7c31a4
All file operations are run on the threadpool. See :ref:`threadpool` for information
Packit Service 7c31a4
on the threadpool size.
Packit Service 7c31a4
Packit Service 7c31a4
.. note::
Packit Service 7c31a4
     On Windows `uv_fs_*` functions use utf-8 encoding.
Packit Service 7c31a4
Packit Service 7c31a4
Data types
Packit Service 7c31a4
----------
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_fs_t
Packit Service 7c31a4
Packit Service 7c31a4
    File system request type.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_timespec_t
Packit Service 7c31a4
Packit Service 7c31a4
    Portable equivalent of ``struct timespec``.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef struct {
Packit Service 7c31a4
            long tv_sec;
Packit Service 7c31a4
            long tv_nsec;
Packit Service 7c31a4
        } uv_timespec_t;
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_stat_t
Packit Service 7c31a4
Packit Service 7c31a4
    Portable equivalent of ``struct stat``.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef struct {
Packit Service 7c31a4
            uint64_t st_dev;
Packit Service 7c31a4
            uint64_t st_mode;
Packit Service 7c31a4
            uint64_t st_nlink;
Packit Service 7c31a4
            uint64_t st_uid;
Packit Service 7c31a4
            uint64_t st_gid;
Packit Service 7c31a4
            uint64_t st_rdev;
Packit Service 7c31a4
            uint64_t st_ino;
Packit Service 7c31a4
            uint64_t st_size;
Packit Service 7c31a4
            uint64_t st_blksize;
Packit Service 7c31a4
            uint64_t st_blocks;
Packit Service 7c31a4
            uint64_t st_flags;
Packit Service 7c31a4
            uint64_t st_gen;
Packit Service 7c31a4
            uv_timespec_t st_atim;
Packit Service 7c31a4
            uv_timespec_t st_mtim;
Packit Service 7c31a4
            uv_timespec_t st_ctim;
Packit Service 7c31a4
            uv_timespec_t st_birthtim;
Packit Service 7c31a4
        } uv_stat_t;
Packit Service 7c31a4
Packit Service e2ebee
.. c:enum:: uv_fs_type
Packit Service 7c31a4
Packit Service 7c31a4
    File system request type.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef enum {
Packit Service 7c31a4
            UV_FS_UNKNOWN = -1,
Packit Service 7c31a4
            UV_FS_CUSTOM,
Packit Service 7c31a4
            UV_FS_OPEN,
Packit Service 7c31a4
            UV_FS_CLOSE,
Packit Service 7c31a4
            UV_FS_READ,
Packit Service 7c31a4
            UV_FS_WRITE,
Packit Service 7c31a4
            UV_FS_SENDFILE,
Packit Service 7c31a4
            UV_FS_STAT,
Packit Service 7c31a4
            UV_FS_LSTAT,
Packit Service 7c31a4
            UV_FS_FSTAT,
Packit Service 7c31a4
            UV_FS_FTRUNCATE,
Packit Service 7c31a4
            UV_FS_UTIME,
Packit Service 7c31a4
            UV_FS_FUTIME,
Packit Service 7c31a4
            UV_FS_ACCESS,
Packit Service 7c31a4
            UV_FS_CHMOD,
Packit Service 7c31a4
            UV_FS_FCHMOD,
Packit Service 7c31a4
            UV_FS_FSYNC,
Packit Service 7c31a4
            UV_FS_FDATASYNC,
Packit Service 7c31a4
            UV_FS_UNLINK,
Packit Service 7c31a4
            UV_FS_RMDIR,
Packit Service 7c31a4
            UV_FS_MKDIR,
Packit Service 7c31a4
            UV_FS_MKDTEMP,
Packit Service 7c31a4
            UV_FS_RENAME,
Packit Service 7c31a4
            UV_FS_SCANDIR,
Packit Service 7c31a4
            UV_FS_LINK,
Packit Service 7c31a4
            UV_FS_SYMLINK,
Packit Service 7c31a4
            UV_FS_READLINK,
Packit Service 7c31a4
            UV_FS_CHOWN,
Packit Service 7c31a4
            UV_FS_FCHOWN,
Packit Service 7c31a4
            UV_FS_REALPATH,
Packit Service 7c31a4
            UV_FS_COPYFILE,
Packit Service 7c31a4
            UV_FS_LCHOWN,
Packit Service 7c31a4
            UV_FS_OPENDIR,
Packit Service 7c31a4
            UV_FS_READDIR,
Packit Service 7c31a4
            UV_FS_CLOSEDIR,
Packit Service 7c31a4
            UV_FS_MKSTEMP,
Packit Service 7c31a4
            UV_FS_LUTIME
Packit Service 7c31a4
        } uv_fs_type;
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_statfs_t
Packit Service 7c31a4
Packit Service 7c31a4
    Reduced cross platform equivalent of ``struct statfs``.
Packit Service 7c31a4
    Used in :c:func:`uv_fs_statfs`.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef struct uv_statfs_s {
Packit Service 7c31a4
            uint64_t f_type;
Packit Service 7c31a4
            uint64_t f_bsize;
Packit Service 7c31a4
            uint64_t f_blocks;
Packit Service 7c31a4
            uint64_t f_bfree;
Packit Service 7c31a4
            uint64_t f_bavail;
Packit Service 7c31a4
            uint64_t f_files;
Packit Service 7c31a4
            uint64_t f_ffree;
Packit Service 7c31a4
            uint64_t f_spare[4];
Packit Service 7c31a4
        } uv_statfs_t;
Packit Service 7c31a4
Packit Service e2ebee
.. c:enum:: uv_dirent_t
Packit Service 7c31a4
Packit Service 7c31a4
    Cross platform (reduced) equivalent of ``struct dirent``.
Packit Service 7c31a4
    Used in :c:func:`uv_fs_scandir_next`.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef enum {
Packit Service 7c31a4
            UV_DIRENT_UNKNOWN,
Packit Service 7c31a4
            UV_DIRENT_FILE,
Packit Service 7c31a4
            UV_DIRENT_DIR,
Packit Service 7c31a4
            UV_DIRENT_LINK,
Packit Service 7c31a4
            UV_DIRENT_FIFO,
Packit Service 7c31a4
            UV_DIRENT_SOCKET,
Packit Service 7c31a4
            UV_DIRENT_CHAR,
Packit Service 7c31a4
            UV_DIRENT_BLOCK
Packit Service 7c31a4
        } uv_dirent_type_t;
Packit Service 7c31a4
Packit Service 7c31a4
        typedef struct uv_dirent_s {
Packit Service 7c31a4
            const char* name;
Packit Service 7c31a4
            uv_dirent_type_t type;
Packit Service 7c31a4
        } uv_dirent_t;
Packit Service 7c31a4
Packit Service 7c31a4
.. c:type:: uv_dir_t
Packit Service 7c31a4
Packit Service 7c31a4
    Data type used for streaming directory iteration.
Packit Service 7c31a4
    Used by :c:func:`uv_fs_opendir()`, :c:func:`uv_fs_readdir()`, and
Packit Service 7c31a4
    :c:func:`uv_fs_closedir()`. `dirents` represents a user provided array of
Packit Service 7c31a4
    `uv_dirent_t`s used to hold results. `nentries` is the user provided maximum
Packit Service 7c31a4
    array size of `dirents`.
Packit Service 7c31a4
Packit Service 7c31a4
    ::
Packit Service 7c31a4
Packit Service 7c31a4
        typedef struct uv_dir_s {
Packit Service 7c31a4
            uv_dirent_t* dirents;
Packit Service 7c31a4
            size_t nentries;
Packit Service 7c31a4
        } uv_dir_t;
Packit Service 7c31a4
Packit Service 7c31a4
Packit Service 7c31a4
Public members
Packit Service 7c31a4
^^^^^^^^^^^^^^
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: uv_loop_t* uv_fs_t.loop
Packit Service 7c31a4
Packit Service 7c31a4
    Loop that started this request and where completion will be reported.
Packit Service 7c31a4
    Readonly.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: uv_fs_type uv_fs_t.fs_type
Packit Service 7c31a4
Packit Service 7c31a4
    FS request type.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: const char* uv_fs_t.path
Packit Service 7c31a4
Packit Service 7c31a4
    Path affecting the request.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: ssize_t uv_fs_t.result
Packit Service 7c31a4
Packit Service 7c31a4
    Result of the request. < 0 means error, success otherwise. On requests such
Packit Service 7c31a4
    as :c:func:`uv_fs_read` or :c:func:`uv_fs_write` it indicates the amount of
Packit Service 7c31a4
    data that was read or written, respectively.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: uv_stat_t uv_fs_t.statbuf
Packit Service 7c31a4
Packit Service 7c31a4
    Stores the result of :c:func:`uv_fs_stat` and other stat requests.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:member:: void* uv_fs_t.ptr
Packit Service 7c31a4
Packit Service 7c31a4
    Stores the result of :c:func:`uv_fs_readlink` and
Packit Service 7c31a4
    :c:func:`uv_fs_realpath` and serves as an alias to `statbuf`.
Packit Service 7c31a4
Packit Service 7c31a4
.. seealso:: The :c:type:`uv_req_t` members also apply.
Packit Service 7c31a4
Packit Service 7c31a4
Packit Service 7c31a4
API
Packit Service 7c31a4
---
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: void uv_fs_req_cleanup(uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Cleanup request. Must be called after a request is finished to deallocate
Packit Service 7c31a4
    any memory libuv might have allocated.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`close(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`open(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        On Windows libuv uses `CreateFileW` and thus the file is always opened
Packit Service 7c31a4
        in binary mode. Because of this the O_BINARY and O_TEXT flags are not
Packit Service 7c31a4
        supported.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`preadv(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. warning::
Packit Service 7c31a4
        On Windows, under non-MSVC environments (e.g. when GCC or Clang is used
Packit Service 7c31a4
        to build libuv), files opened using ``UV_FS_O_FILEMAP`` may cause a fatal
Packit Service 7c31a4
        crash if the memory mapped read operation fails.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`unlink(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, const uv_buf_t bufs[], unsigned int nbufs, int64_t offset, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`pwritev(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. warning::
Packit Service 7c31a4
        On Windows, under non-MSVC environments (e.g. when GCC or Clang is used
Packit Service 7c31a4
        to build libuv), files opened using ``UV_FS_O_FILEMAP`` may cause a fatal
Packit Service 7c31a4
        crash if the memory mapped write operation fails.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`mkdir(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `mode` is currently not implemented on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`mkdtemp(3)`. The result can be found as a null terminated string at `req->path`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_mkstemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`mkstemp(3)`. The created file path can be found as a null terminated string at `req->path`.
Packit Service 7c31a4
    The file descriptor can be found as an integer at `req->result`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.34.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`rmdir(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_opendir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Opens `path` as a directory stream. On success, a `uv_dir_t` is allocated
Packit Service 7c31a4
    and returned via `req->ptr`. This memory is not freed by
Packit Service 7c31a4
    `uv_fs_req_cleanup()`, although `req->ptr` is set to `NULL`. The allocated
Packit Service 7c31a4
    memory must be freed by calling `uv_fs_closedir()`. On failure, no memory
Packit Service 7c31a4
    is allocated.
Packit Service 7c31a4
Packit Service 7c31a4
    The contents of the directory can be iterated over by passing the resulting
Packit Service 7c31a4
    `uv_dir_t` to `uv_fs_readdir()`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.28.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_closedir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Closes the directory stream represented by `dir` and frees the memory
Packit Service 7c31a4
    allocated by `uv_fs_opendir()`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.28.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, uv_dir_t* dir, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Iterates over the directory stream, `dir`, returned by a successful
Packit Service 7c31a4
    `uv_fs_opendir()` call. Prior to invoking `uv_fs_readdir()`, the caller
Packit Service 7c31a4
    must set `dir->dirents` and `dir->nentries`, representing the array of
Packit Service 7c31a4
    :c:type:`uv_dirent_t` elements used to hold the read directory entries and
Packit Service 7c31a4
    its size.
Packit Service 7c31a4
Packit Service 7c31a4
    On success, the result is an integer >= 0 representing the number of entries
Packit Service 7c31a4
    read from the stream.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.28.0
Packit Service 7c31a4
Packit Service 7c31a4
    .. warning::
Packit Service 7c31a4
        `uv_fs_readdir()` is not thread safe.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        This function does not return the "." and ".." entries.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        On success this function allocates memory that must be freed using
Packit Service 7c31a4
        `uv_fs_req_cleanup()`. `uv_fs_req_cleanup()` must be called before
Packit Service 7c31a4
        closing the directory with `uv_fs_closedir()`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`scandir(3)`, with a slightly different API. Once the callback
Packit Service 7c31a4
    for the request is called, the user can use :c:func:`uv_fs_scandir_next` to
Packit Service 7c31a4
    get `ent` populated with the next directory entry data. When there are no
Packit Service 7c31a4
    more entries ``UV_EOF`` will be returned.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        Unlike `scandir(3)`, this function does not return the "." and ".." entries.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        On Linux, getting the type of an entry is only supported by some file systems (btrfs, ext2,
Packit Service 7c31a4
        ext3 and ext4 at the time of this writing), check the :man:`getdents(2)` man page.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`stat(2)`, :man:`fstat(2)` and :man:`lstat(2)` respectively.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_statfs(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`statfs(2)`. On success, a `uv_statfs_t` is allocated
Packit Service 7c31a4
    and returned via `req->ptr`. This memory is freed by `uv_fs_req_cleanup()`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        Any fields in the resulting `uv_statfs_t` that are not supported by the
Packit Service 7c31a4
        underlying operating system are set to zero.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.31.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`rename(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`fsync(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        For AIX, `uv_fs_fsync` returns `UV_EBADF` on file descriptors referencing
Packit Service 7c31a4
        non regular files.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`fdatasync(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, int64_t offset, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`ftruncate(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_copyfile(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Copies a file from `path` to `new_path`. Supported `flags` are described below.
Packit Service 7c31a4
Packit Service 7c31a4
    - `UV_FS_COPYFILE_EXCL`: If present, `uv_fs_copyfile()` will fail with
Packit Service 7c31a4
      `UV_EEXIST` if the destination path already exists. The default behavior
Packit Service 7c31a4
      is to overwrite the destination if it exists.
Packit Service 7c31a4
    - `UV_FS_COPYFILE_FICLONE`: If present, `uv_fs_copyfile()` will attempt to
Packit Service 7c31a4
      create a copy-on-write reflink. If the underlying platform does not
Packit Service 7c31a4
      support copy-on-write, or an error occurs while attempting to use
Packit Service 7c31a4
      copy-on-write, a fallback copy mechanism based on
Packit Service 7c31a4
      :c:func:`uv_fs_sendfile()` is used.
Packit Service 7c31a4
    - `UV_FS_COPYFILE_FICLONE_FORCE`: If present, `uv_fs_copyfile()` will
Packit Service 7c31a4
      attempt to create a copy-on-write reflink. If the underlying platform does
Packit Service 7c31a4
      not support copy-on-write, or an error occurs while attempting to use
Packit Service 7c31a4
      copy-on-write, then an error is returned.
Packit Service 7c31a4
Packit Service 7c31a4
    .. warning::
Packit Service 7c31a4
        If the destination path is created, but an error occurs while copying
Packit Service 7c31a4
        the data, then the destination path is removed. There is a brief window
Packit Service 7c31a4
        of time between closing and removing the file where another process
Packit Service 7c31a4
        could access the file.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.14.0
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionchanged:: 1.20.0 `UV_FS_COPYFILE_FICLONE` and
Packit Service 7c31a4
        `UV_FS_COPYFILE_FICLONE_FORCE` are supported.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionchanged:: 1.33.0 If an error occurs while using
Packit Service 7c31a4
        `UV_FS_COPYFILE_FICLONE_FORCE`, that error is returned. Previously,
Packit Service 7c31a4
        all errors were mapped to `UV_ENOTSUP`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, uv_file in_fd, int64_t in_offset, size_t length, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Limited equivalent to :man:`sendfile(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_access(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`access(2)` on Unix. Windows uses ``GetFileAttributesW()``.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`chmod(2)` and :man:`fchmod(2)` respectively.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_lutime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`utime(2)`, :man:`futimes(3)` and :man:`lutimes(3)` respectively.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
      z/OS: `uv_fs_lutime()` is not implemented for z/OS. It can still be called but will return
Packit Service 7c31a4
      ``UV_ENOSYS``.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
      AIX: `uv_fs_futime()` and `uv_fs_lutime()` functions only work for AIX 7.1 and newer.
Packit Service 7c31a4
      They can still be called on older versions but will return ``UV_ENOSYS``.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionchanged:: 1.10.0 sub-second precission is supported on Windows
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`link(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, int flags, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`symlink(2)`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        On Windows the `flags` parameter can be specified to control how the symlink will
Packit Service 7c31a4
        be created:
Packit Service 7c31a4
Packit Service 7c31a4
            * ``UV_FS_SYMLINK_DIR``: indicates that `path` points to a directory.
Packit Service 7c31a4
Packit Service 7c31a4
            * ``UV_FS_SYMLINK_JUNCTION``: request that the symlink is created
Packit Service 7c31a4
              using junction points.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`readlink(2)`.
Packit Service 7c31a4
    The resulting string is stored in `req->ptr`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_realpath(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`realpath(3)` on Unix. Windows uses `GetFinalPathNameByHandle <https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea>`_.
Packit Service 7c31a4
    The resulting string is stored in `req->ptr`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. warning::
Packit Service 7c31a4
        This function has certain platform-specific caveats that were discovered when used in Node.
Packit Service 7c31a4
Packit Service 7c31a4
        * macOS and other BSDs: this function will fail with UV_ELOOP if more than 32 symlinks are
Packit Service 7c31a4
          found while resolving the given path.  This limit is hardcoded and cannot be sidestepped.
Packit Service 7c31a4
        * Windows: while this function works in the common case, there are a number of corner cases
Packit Service 7c31a4
          where it doesn't:
Packit Service 7c31a4
Packit Service 7c31a4
          - Paths in ramdisk volumes created by tools which sidestep the Volume Manager (such as ImDisk)
Packit Service 7c31a4
            cannot be resolved.
Packit Service 7c31a4
          - Inconsistent casing when using drive letters.
Packit Service 7c31a4
          - Resolved path bypasses subst'd drives.
Packit Service 7c31a4
Packit Service 7c31a4
        While this function can still be used, it's not recommended if scenarios such as the
Packit Service 7c31a4
        above need to be supported.
Packit Service 7c31a4
Packit Service 7c31a4
        The background story and some more details on these issues can be checked
Packit Service 7c31a4
        `here <https://github.com/nodejs/node/issues/7726>`_.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
      This function is not implemented on Windows XP and Windows Server 2003.
Packit Service 7c31a4
      On these systems, UV_ENOSYS is returned.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.8.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
Packit Service 7c31a4
.. c:function:: int uv_fs_lchown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid, uv_gid_t gid, uv_fs_cb cb)
Packit Service 7c31a4
Packit Service 7c31a4
    Equivalent to :man:`chown(2)`, :man:`fchown(2)` and :man:`lchown(2)` respectively.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        These functions are not implemented on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionchanged:: 1.21.0 implemented uv_fs_lchown
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: uv_fs_type uv_fs_get_type(const uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns `req->fs_type`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.19.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: ssize_t uv_fs_get_result(const uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns `req->result`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.19.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_fs_get_system_error(const uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns the platform specific error code - `GetLastError()` value on Windows
Packit Service 7c31a4
    and `-(req->result)` on other platforms.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.38.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: void* uv_fs_get_ptr(const uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns `req->ptr`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.19.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: const char* uv_fs_get_path(const uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns `req->path`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.19.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: uv_stat_t* uv_fs_get_statbuf(uv_fs_t* req)
Packit Service 7c31a4
Packit Service 7c31a4
    Returns `&req->statbuf`.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.19.0
Packit Service 7c31a4
Packit Service 7c31a4
.. seealso:: The :c:type:`uv_req_t` API functions also apply.
Packit Service 7c31a4
Packit Service 7c31a4
Helper functions
Packit Service 7c31a4
----------------
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: uv_os_fd_t uv_get_osfhandle(int fd)
Packit Service 7c31a4
Packit Service 7c31a4
   For a file descriptor in the C runtime, get the OS-dependent handle.
Packit Service 7c31a4
   On UNIX, returns the ``fd`` intact. On Windows, this calls `_get_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle?view=vs-2019>`_.
Packit Service 7c31a4
   Note that the return value is still owned by the C runtime,
Packit Service 7c31a4
   any attempts to close it or to use it after closing the fd may lead to malfunction.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.12.0
Packit Service 7c31a4
Packit Service 7c31a4
.. c:function:: int uv_open_osfhandle(uv_os_fd_t os_fd)
Packit Service 7c31a4
Packit Service 7c31a4
   For a OS-dependent handle, get the file descriptor in the C runtime.
Packit Service 7c31a4
   On UNIX, returns the ``os_fd`` intact. On Windows, this calls `_open_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/open-osfhandle?view=vs-2019>`_.
Packit Service e2ebee
   Note that this consumes the argument, any attempts to close it or to use it
Packit Service e2ebee
   after closing the return value may lead to malfunction.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionadded:: 1.23.0
Packit Service 7c31a4
Packit Service 7c31a4
File open constants
Packit Service 7c31a4
-------------------
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_APPEND
Packit Service 7c31a4
Packit Service 7c31a4
    The file is opened in append mode. Before each write, the file offset is
Packit Service 7c31a4
    positioned at the end of the file.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_CREAT
Packit Service 7c31a4
Packit Service 7c31a4
    The file is created if it does not already exist.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_DIRECT
Packit Service 7c31a4
Packit Service 7c31a4
    File I/O is done directly to and from user-space buffers, which must be
Packit Service 7c31a4
    aligned. Buffer size and address should be a multiple of the physical sector
Packit Service 7c31a4
    size of the block device.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_DIRECT` is supported on Linux, and on Windows via
Packit Service 7c31a4
        `FILE_FLAG_NO_BUFFERING <https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering>`_.
Packit Service 7c31a4
        `UV_FS_O_DIRECT` is not supported on macOS.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_DIRECTORY
Packit Service 7c31a4
Packit Service 7c31a4
    If the path is not a directory, fail the open.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_DIRECTORY` is not supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_DSYNC
Packit Service 7c31a4
Packit Service 7c31a4
    The file is opened for synchronous I/O. Write operations will complete once
Packit Service 7c31a4
    all data and a minimum of metadata are flushed to disk.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_DSYNC` is supported on Windows via
Packit Service 7c31a4
        `FILE_FLAG_WRITE_THROUGH <https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_EXCL
Packit Service 7c31a4
Packit Service 7c31a4
    If the `O_CREAT` flag is set and the file already exists, fail the open.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        In general, the behavior of `O_EXCL` is undefined if it is used without
Packit Service 7c31a4
        `O_CREAT`. There is one exception: on Linux 2.6 and later, `O_EXCL` can
Packit Service 7c31a4
        be used without `O_CREAT` if pathname refers to a block device. If the
Packit Service 7c31a4
        block device is in use by the system (e.g., mounted), the open will fail
Packit Service 7c31a4
        with the error `EBUSY`.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_EXLOCK
Packit Service 7c31a4
Packit Service 7c31a4
    Atomically obtain an exclusive lock.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_EXLOCK` is only supported on macOS and Windows.
Packit Service 7c31a4
Packit Service 7c31a4
    .. versionchanged:: 1.17.0 support is added for Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_FILEMAP
Packit Service 7c31a4
Packit Service 7c31a4
    Use a memory file mapping to access the file. When using this flag, the
Packit Service 7c31a4
    file cannot be open multiple times concurrently.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_FILEMAP` is only supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_NOATIME
Packit Service 7c31a4
Packit Service 7c31a4
    Do not update the file access time when the file is read.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_NOATIME` is not supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_NOCTTY
Packit Service 7c31a4
Packit Service 7c31a4
    If the path identifies a terminal device, opening the path will not cause
Packit Service 7c31a4
    that terminal to become the controlling terminal for the process (if the
Packit Service 7c31a4
    process does not already have one).
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_NOCTTY` is not supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_NOFOLLOW
Packit Service 7c31a4
Packit Service 7c31a4
    If the path is a symbolic link, fail the open.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_NOFOLLOW` is not supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_NONBLOCK
Packit Service 7c31a4
Packit Service 7c31a4
    Open the file in nonblocking mode if possible.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_NONBLOCK` is not supported on Windows.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_RANDOM
Packit Service 7c31a4
Packit Service 7c31a4
    Access is intended to be random. The system can use this as a hint to
Packit Service 7c31a4
    optimize file caching.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_RANDOM` is only supported on Windows via
Packit Service 7c31a4
        `FILE_FLAG_RANDOM_ACCESS <https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_RDONLY
Packit Service 7c31a4
Packit Service 7c31a4
    Open the file for read-only access.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_RDWR
Packit Service 7c31a4
Packit Service 7c31a4
    Open the file for read-write access.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_SEQUENTIAL
Packit Service 7c31a4
Packit Service 7c31a4
    Access is intended to be sequential from beginning to end. The system can
Packit Service 7c31a4
    use this as a hint to optimize file caching.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_SEQUENTIAL` is only supported on Windows via
Packit Service 7c31a4
        `FILE_FLAG_SEQUENTIAL_SCAN <https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_SHORT_LIVED
Packit Service 7c31a4
Packit Service 7c31a4
    The file is temporary and should not be flushed to disk if possible.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_SHORT_LIVED` is only supported on Windows via
Packit Service 7c31a4
        `FILE_ATTRIBUTE_TEMPORARY <https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_SYMLINK
Packit Service 7c31a4
Packit Service 7c31a4
    Open the symbolic link itself rather than the resource it points to.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_SYNC
Packit Service 7c31a4
Packit Service 7c31a4
    The file is opened for synchronous I/O. Write operations will complete once
Packit Service 7c31a4
    all data and all metadata are flushed to disk.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_SYNC` is supported on Windows via
Packit Service 7c31a4
        `FILE_FLAG_WRITE_THROUGH <https://docs.microsoft.com/en-us/windows/win32/fileio/file-buffering>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_TEMPORARY
Packit Service 7c31a4
Packit Service 7c31a4
    The file is temporary and should not be flushed to disk if possible.
Packit Service 7c31a4
Packit Service 7c31a4
    .. note::
Packit Service 7c31a4
        `UV_FS_O_TEMPORARY` is only supported on Windows via
Packit Service 7c31a4
        `FILE_ATTRIBUTE_TEMPORARY <https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea>`_.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_TRUNC
Packit Service 7c31a4
Packit Service 7c31a4
    If the file exists and is a regular file, and the file is opened
Packit Service 7c31a4
    successfully for write access, its length shall be truncated to zero.
Packit Service 7c31a4
Packit Service 7c31a4
.. c:macro:: UV_FS_O_WRONLY
Packit Service 7c31a4
Packit Service 7c31a4
    Open the file for write-only access.