NAME
vmsplice - splice user pages into a pipe
SYNOPSIS
#define _GNU_SOURCE
#include <fcntl.h>
#include <sys/uio.h>
I long vmsplice(int fd , const struct iovec * iov ,
I unsigned long nr_segs , unsigned int flags );
DESCRIPTION
The
R vmsplice ()
system call maps
nr_segs
ranges of user memory described by
iov
into a pipe.
The file descriptor
fd
must refer to a pipe.
The pointer
iov
points to an array of
iovec
structures as defined in
R <sys/uio.h> :
struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes */
};
The
flags
argument is a bit mask that is composed by ORing together
zero or more of the following values:
SPLICE_F_MOVE
Unused for
R vmsplice ();
see
splice(2).
SPLICE_F_NONBLOCK
Do not block on I/O; see
splice(2)
for further details.
SPLICE_F_MORE
Currently has no effect for
R vmsplice (),
but may be implemented in the future; see
splice(2).
SPLICE_F_GIFT
The user pages are a gift to the kernel.
The application may not modify this memory ever,
or page cache and on-disk data may differ.
Gifting pages to the kernel means that a subsequent
splice(2)
SPLICE_F_MOVE
can successfully move the pages;
if this flag is not specified, then a subsequent
splice(2)
SPLICE_F_MOVE
must copy the pages.
Data must also be properly page aligned, both in memory and length.
RETURN VALUE
Upon successful completion,
R vmsplice ()
returns the number of bytes transferred to the pipe.
On error,
R vmsplice ()
returns -1 and
errno
is set to indicate the error.
ERRORS
EBADF
fd
either not valid, or doesn't refer to a pipe.
EINVAL
nr_segs
is 0 or greater than
R IOV_MAX;
or memory not aligned if
SPLICE_F_GIFT
set.
VERSIONS
The
vmsplice(2)
system call first appeared in Linux 2.6.17.
CONFORMING TO
This system call is Linux specific.
NOTES
R vmsplice ()
follows the other vectorized read/write type functions when it comes to
limitations on number of segments being passed in.
This limit is
IOV_MAX
as defined in
R <limits.h> .
At the time of this writing, that limit is 1024.
SEE ALSO