2个版本
0.1.1 | 2024年5月10日 |
---|---|
0.1.0 | 2024年5月10日 |
#521 in 文件系统
49KB
959 行
使用fopencookie
系统调用,将io::Write
/io::Read
/io::Seek
转换为libc::FILE
流。
非常适合在FFI中传递Rust特性。
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!");
支持特质对象!
let mut reader: Box<dyn io::Read>;
let stream = fopencookie::IoCStream::reader(reader);
您可以使用Builder
来获得更多灵活性。
let mut file: File;
let stream = fopencookie::Builder::new()
.read()
.write()
.seek()
.build(file);
lib.rs
:
使用fopencookie
系统调用,将io::Write
/io::Read
/io::Seek
转换为libc::FILE
流。
非常适合在FFI中传递Rust特性。
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!");
支持特质对象!
let mut reader: Box<dyn io::Read>;
let stream = fopencookie::IoCStream::reader(reader);
您可以使用Builder
来获得更多灵活性。
let mut file: File;
let stream = fopencookie::Builder::new()
.read()
.write()
.seek()
.build(file);
依赖关系
~0–2MB
~41K SLoC