[−][src]Crate libaiofut
Straightforward Linux AIO using Futures/async/await.
Example
Use libaiofut to schedule writes to a file:
use futures::{executor::LocalPool, future::FutureExt, task::LocalSpawnExt}; use libaiofut::AIOBuilder; use std::os::unix::io::AsRawFd; let mut aiomgr = AIOBuilder::default().build().unwrap(); let file = std::fs::OpenOptions::new() .read(true) .write(true) .create(true) .truncate(true) .open("test") .unwrap(); let fd = file.as_raw_fd(); // keep all returned futures in a vector let ws = vec![(0, "hello"), (5, "world"), (2, "xxxx")] .into_iter() .map(|(off, s)| aiomgr.write(fd, off, s.as_bytes().into(), None)) .collect::<Vec<_>>(); // here we use futures::executor::LocalPool to poll all futures let mut pool = LocalPool::new(); let spawner = pool.spawner(); for w in ws.into_iter() { let h = spawner.spawn_local_with_handle(w).unwrap().map(|r| { println!("wrote {} bytes", r.0.unwrap()); }); spawner.spawn_local(h).unwrap(); } pool.run();
Structs
AIO | Represent the necessary data for an AIO operation. Memory-safe when moved. |
AIOBatchSchedulerIn | |
AIOBatchSchedulerOut | |
AIOBuilder | |
AIOFuture | Represents a scheduled (future) asynchronous I/O operation, which gets executed (resolved) automatically. |
AIOManager | Manager all AIOs. |
AIONotifier | The state machine for finished AIO operations and wakes up the futures. |
Enums
Error |
Type Definitions
AIOResult | The result of an AIO operation: the number of bytes written on success, or the errno on failure. |