# UFFDIO_COPY

## NAME



           UFFDIO_COPY - atomically copy a continuous memory chunk into the
           userfault registered range
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <linux/userfaultfd.h>  **/* Definition of **UFFD*** constants */
           **#include <sys/ioctl.h>**
    
           **int ioctl(int** _fd_**, UFFDIO_COPY, struct uffdio_copy ***_argp_**);**
    
           **#include <linux/userfaultfd.h>**
    
           **struct uffdio_copy {**
               **__u64  dst;** /* Destination of copy */
               **__u64  src;** /* Source of copy */
               **__u64  len;** /* Number of bytes to copy */
               **__u64  mode;** /* Flags controlling behavior of copy */
               **__s64  copy;** /* Number of bytes copied, or negated error */
           **};**
    


## DESCRIPTION



           Atomically copy a continuous memory chunk into the userfault
           registered range and optionally wake up the blocked thread.
    
           The following value may be bitwise ORed in _mode_ to change the
           behavior of the **UFFDIO_COPY** operation:
    
           **UFFDIO_COPY_MODE_DONTWAKE**
                  Do not wake up the thread that waits for page-fault
                  resolution
    
           **UFFDIO_COPY_MODE_WP**
                  Copy the page with read-only permission.  This allows the
                  user to trap the next write to the page, which will block
                  and generate another write-protect userfault message.  This
                  is used only when both **UFFDIO_REGISTER_MODE_MISSING** and
                  **UFFDIO_REGISTER_MODE_WP** modes are enabled for the
                  registered range.
    
           The _copy_ field is used by the kernel to return the number of bytes
           that was actually copied, or an error (a negated _errno_ -style
           value).  The _copy_ field is output-only; it is not read by the
           **UFFDIO_COPY** operation.
    


## RETURN VALUE



           On success, 0 is returned.  In this case, the entire area was
           copied.
    
           On error, -1 is returned and _errno_ is set to indicate the error.
    


## ERRORS



           **EAGAIN** The number of bytes copied (i.e., the value returned in the
                  _copy_ field) does not equal the value that was specified in
                  the _len_ field.
    
           **EINVAL** Either _dst_ or _len_ was not a multiple of the system page
                  size, or the range specified by _src_ and _len_ or _dst_ and _len_
                  was invalid.
    
           **EINVAL** An invalid bit was specified in the _mode_ field.
    
           **ENOENT**(since Linux 4.11)
                  The faulting process has changed its virtual memory layout
                  simultaneously with an outstanding **UFFDIO_COPY** operation.
    
           **ENOSPC**(from Linux 4.11 until Linux 4.13)
                  The faulting process has exited at the time of a
                  **UFFDIO_COPY** operation.
    
           **ESRCH**(since Linux 4.13)
                  The faulting process has exited at the time of a
                  **UFFDIO_COPY** operation.
    


## STANDARDS



           Linux.
    


## EXAMPLES



           See userfaultfd(2).
    


* * *