fopencookie 0.1.1

interface between std::io and libc::FILE
Documentation

Convert an [io::Write]/[io::Read]/[io::Seek] to a [libc::FILE] stream using the fopencookie syscall.

Great for passing rust traits across FFI.

let mut v = vec![];
let stream = fopencookie::IoCStream::writer(&mut v);

// Use the libc stream functions
assert_eq!(
    unsafe {
        libc::fprintf(stream.as_ptr(), c"hello, world!".as_ptr())
    },
    13 // all bytes written
);

// It's reflected in our rust type!
assert_eq!(v, b"hello, world!");

Trait objects are supported!

let mut reader: Box<dyn io::Read>;
let stream = fopencookie::IoCStream::reader(reader);

You can use the [Builder] for more flexibility.

let mut file: File;
let stream = fopencookie::Builder::new()
    .read()
    .write()
    .seek()
    .build(file);