Expand description
Filesystem extensions and utilities.
The PosRead
trait offers a uniform pread
for positioned reads.
The ReadPos
and ReadSlice
types re-implement Read
and Seek
over
any Borrow
of a PosRead
type. For File
in particular, this enables
multiple independent reader instances, without needing a path to open an
independent new File
instance. Thus these types are compatible with
“unnamed” (not linked) temporary files, and can reduce the number of
necessary file handles. Note that unix dup
/dup2
and the standard
File::try_clone
do not provide independent file positions.
Example
extern crate olio;
extern crate tempfile;
use std::fs::File;
use std::io::{Read, Write};
use olio::fs::{ReadPos, ReadSlice};
use tempfile::tempfile;
let mut file = tempfile()?;
file.write_all(b"0123456789")?;
// ReadPos by &File so that we can subslice by shared reference
let mut rpos = ReadPos::new(&file, 10);
// Read the first half
let mut buf = [0u8; 5];
rpos.read_exact(&mut buf)?;
assert_eq!(&buf, b"01234");
// Create an independent ReadSlice and read to end
let mut rslice = rpos.subslice(2, 7);
let mut buf = Vec::new();
rslice.read_to_end(&mut buf)?;
assert_eq!(&buf, b"23456");
// Read the second half from the original ReadPos
assert_eq!(rpos.tell(), 5);
let mut buf = [0u8; 5];
rpos.read_exact(&mut buf)?;
assert_eq!(&buf, b"56789");
Modules
Compatibility type aliases.
Structs
Re-implements
Read
and Seek
over PosRead
using only positioned
reads, and by maintaining an instance independent position.Re-implements
Read
and Seek
over PosRead
using only positioned
reads, and by maintaining instance independent start, end, and position.Traits
Trait offering a uniform
pread
for positioned reads, with platform
dependent side-effects.