|
NAMEcopy_file_range —
kernel copy of a byte range from one file to another or within
one file
LIBRARYStandard C Library (libc, -lc)SYNOPSIS#include <sys/types.h>
#include <unistd.h>
ssize_t
DESCRIPTIONThecopy_file_range () system call copies up to
len bytes from infd to
outfd in the kernel. It may do this using a file system
specific technique if infd and
outfd are on the same file system. If
infd and outfd refer to the same
file, the byte ranges defined by the input file offset, output file offset and
len cannot overlap. The infd
argument must be opened for reading and the outfd
argument must be opened for writing, but not O_APPEND .
If inoffp or outoffp is
NULL , the file offset for infd
or outfd respectively will be used and updated by the
number of bytes copied. If inoffp or
outoffp is not NULL , the byte
offset pointed to by inoffp or
outoffp respectively will be used/updated and the file
offset for infd or outfd
respectively will not be affected. The flags argument
must be 0.
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
lseek(2)
with For best performance, call
RETURN VALUESIf it succeeds, the call returns the number of bytes copied, which can be fewer than len. Returning fewer bytes than len does not necessarily indicate that EOF was reached. However, a return of zero for a non-zero len argument indicates that the offset for infd is at or beyond EOF.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
errno.
ERRORSThecopy_file_range () system call will fail if:
SEE ALSOlseek(2)STANDARDSThecopy_file_range () system call is expected to be
compatible with the Linux system call of the same name.
HISTORYThecopy_file_range () function appeared in
FreeBSD 13.0.
Visit the GSP FreeBSD Man Page Interface. |