axio
路径:
components/axio类型:库 crate 分层:组件层 / 通用同步 I/O 语义层 版本:0.3.0-pre.1文档依据:Cargo.toml、README.md、src/lib.rs、src/read/mod.rs、src/write/mod.rs、src/seek/mod.rs、src/buffered/*、src/iobuf/*、src/utils/*、tests/*
axio 是仓库里所有“同步 I/O 行为”共享的一层公共协议。它把 Rust std::io 的核心 trait、缓冲包装器和若干辅助适配器移植到 no_std 语境,并将错误统一到 ax-errno。文件、socket、内存游标、用户态缓冲区访问器、POSIX 兼容层里的读写对象,都通过它来表达“可读”“可写”“可 seek”这些共同语义。
最需要先钉死的一条边界是:axio 只定义同步 I/O 接口与默认行为,不负责等待、唤醒、超时和多路复用。PollState 只是一个轻量就绪快照,不是事件系统。
架构设计
设计定位
axio 解决的不是文件系统、网络协议或设备驱动本身,而是这些子系统都必须共享的 I/O 契约:
- 统一的同步 trait:
Read、Write、Seek、BufRead - 统一的缓冲包装器:
BufReader、BufWriter、LineWriter - 统一的游标与 glue 工具:
Cursor、copy、read_fn、write_fn、empty、sink、repeat、take、chain - 统一的“剩余长度”扩展:
IoBuf/IoBufMut
这让上层代码在不关心底层对象究竟是文件、socket、内存切片还是用户缓冲访问器的前提下,复用同一套读写与缓冲逻辑。
模块结构
| 模块 | 作用 |
|---|---|
read | 定义 Read / BufRead,提供 read_exact、read_to_end、read_to_string、read_until、lines 等默认实现 |
write | 定义 Write,提供 write_all、write_fmt 等通用逻辑 |
seek | 定义 Seek / SeekFrom,提供 stream_len、stream_position、rewind、seek_relative |
buffered | 实现 BufReader、BufWriter、LineWriter 以及 IntoInnerError |
iobuf | 定义 IoBuf / IoBufMut 及其扩展 trait,用于暴露剩余可读/可写长度 |
utils | 放置 Cursor、copy、take、chain、empty、sink、repeat、read_fn、write_fn 等适配器 |
prelude | 重导出常用 trait,供上层直接 use ax_io::prelude::* |
1.3 与 std::io 的关系
README.md 已明确说明:axio 基本沿用 Rust 标准库 std::io 的设计与大量实现细节,但为了适配内核和 no_std 场景做了几处关键收敛:
- 错误类型改为
ax_errno::AxError - 不提供
IoSlice、IoSliceMut与*_vectored系列接口 - 在不启用
alloc时保留一条更适合固定缓冲区的最小能力路径
因此,axio 更准确的表述不是“重新发明一套 I/O 接口”,而是“给 ArceOS/StarryOS 提供可在 no_std 中使用的 std::io 内核版”。