aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/sys/copy_file_range.2
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/sys/copy_file_range.2')
-rw-r--r--lib/libc/sys/copy_file_range.2212
1 files changed, 0 insertions, 212 deletions
diff --git a/lib/libc/sys/copy_file_range.2 b/lib/libc/sys/copy_file_range.2
deleted file mode 100644
index 22106b397ef2..000000000000
--- a/lib/libc/sys/copy_file_range.2
+++ /dev/null
@@ -1,212 +0,0 @@
-.\" SPDX-License-Identifier: BSD-2-Clause
-.\"
-.\" Copyright (c) 2019 Rick Macklem
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd January 2, 2021
-.Dt COPY_FILE_RANGE 2
-.Os
-.Sh NAME
-.Nm copy_file_range
-.Nd kernel copy of a byte range from one file to another
-or within one file
-.Sh LIBRARY
-.Lb libc
-.Sh SYNOPSIS
-.In sys/types.h
-.In unistd.h
-.Ft ssize_t
-.Fo copy_file_range
-.Fa "int infd"
-.Fa "off_t *inoffp"
-.Fa "int outfd"
-.Fa "off_t *outoffp"
-.Fa "size_t len"
-.Fa "unsigned int flags"
-.Fc
-.Sh DESCRIPTION
-The
-.Fn copy_file_range
-system call
-copies up to
-.Fa len
-bytes from
-.Fa infd
-to
-.Fa outfd
-in the kernel.
-It may do this using a file system specific technique if
-.Fa infd
-and
-.Fa outfd
-are on the same file system.
-If
-.Fa infd
-and
-.Fa outfd
-refer to the same file, the byte ranges defined by
-the input file offset, output file offset and
-.Fa len
-cannot overlap.
-The
-.Fa infd
-argument must be opened for reading and the
-.Fa outfd
-argument must be opened for writing, but not
-.Dv O_APPEND .
-If
-.Fa inoffp
-or
-.Fa outoffp
-is
-.Dv NULL ,
-the file offset for
-.Fa infd
-or
-.Fa outfd
-respectively will be used and updated by
-the number of bytes copied.
-If
-.Fa inoffp
-or
-.Fa outoffp
-is not
-.Dv NULL ,
-the byte offset pointed to by
-.Fa inoffp
-or
-.Fa outoffp
-respectively will be used/updated and the file offset for
-.Fa infd
-or
-.Fa outfd
-respectively will not be affected.
-The
-.Fa flags
-argument must be 0.
-.Pp
-This system call attempts to maintain holes in the output file for
-the byte range being copied.
-However, this does not always work well.
-It is recommended that sparse files be copied in a loop using
-.Xr lseek 2
-with
-.Dv SEEK_HOLE ,
-.Dv SEEK_DATA
-arguments and this system call for the
-data ranges found.
-.Pp
-For best performance, call
-.Fn copy_file_range
-with the largest
-.Fa len
-value possible.
-It is interruptible on most file systems,
-so there is no penalty for using very large len values, even SSIZE_MAX.
-.Pp
-.Sh RETURN VALUES
-If it succeeds, the call returns the number of bytes copied, which can be fewer
-than
-.Fa len .
-Returning fewer bytes than
-.Fa len
-does not necessarily indicate that EOF was reached.
-However, a return of zero for a non-zero
-.Fa len
-argument indicates that the offset for
-.Fa infd
-is at or beyond EOF.
-.Fn copy_file_range
-should be used in a loop until copying of the desired byte range has been
-completed.
-If an error has occurred, a \-1 is returned and the error code is placed in
-the global variable
-.Va errno .
-.Sh ERRORS
-The
-.Fn copy_file_range
-system call
-will fail if:
-.Bl -tag -width Er
-.It Bq Er EBADF
-If
-.Fa infd
-is not open for reading or
-.Fa outfd
-is not open for writing, or opened for writing with
-.Dv O_APPEND ,
-or if
-.Fa infd
-and
-.Fa outfd
-refer to the same file.
-.It Bq Er EFBIG
-If the copy exceeds the process's file size limit or the maximum file size
-for the file system
-.Fa outfd
-resides on.
-.It Bq Er EINTR
-A signal interrupted the system call
-before it could be completed.
-This may happen for files on some NFS mounts.
-When this happens, the values pointed to by
-.Fa inoffp
-and
-.Fa outoffp
-are reset to the initial values for the system call.
-.It Bq Er EINVAL
-.Fa infd
-and
-.Fa outfd
-refer to the same file and the byte ranges overlap or
-.Fa flags
-is not zero.
-.It Bq Er EIO
-An I/O error occurred while reading/writing the files.
-.It Bq Er EINTEGRITY
-Corrupted data was detected while reading from a file system.
-.It Bq Er EISDIR
-If either
-.Fa infd
-or
-.Fa outfd
-refers to a directory.
-.It Bq Er ENOSPC
-File system that stores
-.Fa outfd
-is full.
-.El
-.Sh SEE ALSO
-.Xr lseek 2
-.Sh STANDARDS
-The
-.Fn copy_file_range
-system call is expected to be compatible with the Linux system call of
-the same name.
-.Sh HISTORY
-The
-.Fn copy_file_range
-function appeared in
-.Fx 13.0 .