From: Eric Wong on 27 May 2010 16:54
The splice family of Linux system calls can transfer data between file
descriptors without the need to copy data into userspace. Instead of a
userspace buffer, they rely on an ordinary Unix pipe as a kernel-level
io_splice is now easier to use, as it can take IO/File objects in
addition to raw file descriptors as arguments.
IO.vmsplice now always splices buffers in full, since it's too difficult
to use otherwise. Keep in mind that the usefulness of vmsplice is still
questionable from Ruby and IO.writev (from the "io-extra" gem) is more
flexible as it allows writing to non-pipe descriptors.
IO.splice and IO.tee are unchanged and may still splice partial buffers.
There are also some code cleanups and improved documentation.