#sendfile #linux #rustc #zero-copy

zio-sendfile

zero-copy I/O for Linux, supporting stable rustc versions

3 unstable releases

0.2.0 Jan 18, 2019
0.1.1 Jan 5, 2019
0.1.0 Jan 5, 2019
Download history 26/week @ 2019-01-02 6/week @ 2019-01-09 19/week @ 2019-01-16 2/week @ 2019-01-23 1/week @ 2019-01-30 1/week @ 2019-02-06 3/week @ 2019-02-20 6/week @ 2019-02-27

16 downloads per month

MIT license

5KB
63 lines

zio-sendfile

Rust crate to provide a higher level abstraction over Linux's zero-copy I/O syscall: sendfile. This provides a significantly faster variant of io::copy(&mut source, &mut dest), which only works on Linux -- the platform of choice for the discerning programmer.

Examples

If you're simply copying a file to a different file descriptor, the copy function can be used:

extern crate zio_sendfile;

let mut source = File::open("source_path").unwrap();
let mut dest = File::create("dest_path").unwrap();
let bytes_per_write = 100 * 1024 * 1024;

zio_sendfile::copy(&mut source, &mut dest, bytes_per_write);

Note that the source and destination does not need to be a File, but can be any type which implements AsRawFd.

If you need a more elaborate configuration, the builder pattern is possible using the SendFile type:

extern crate zio_sendfile;

let mut source = File::open("source_path").unwrap();
SendFile::new(&mut source, 100 * 1024 * 1024)
    .offset(bytes_to_offset)
    .send(&mut File::create("dest_path").unwrap()).unwrap();

Each write will update the offset integer stored within the SendFile, so it can be used to track the progress of a copy.

Dependencies

~189KB