35 个版本

新版本 0.16.3 2024 年 8 月 24 日
0.16.1 2024 年 3 月 29 日
0.15.0 2023 年 6 月 30 日
0.14.3 2023 年 3 月 29 日
0.3.0 2021 年 3 月 5 日

#275Rust 模式

Download history 6/week @ 2024-05-03 2/week @ 2024-05-10 3/week @ 2024-05-17 1/week @ 2024-05-24 5/week @ 2024-05-31 4/week @ 2024-06-07 4/week @ 2024-06-14 2/week @ 2024-06-21 11/week @ 2024-06-28 133/week @ 2024-07-05 7/week @ 2024-07-12 3/week @ 2024-07-19 209/week @ 2024-07-26 22/week @ 2024-08-02 3/week @ 2024-08-09 151/week @ 2024-08-16

385 每月下载量
2 crates 中使用

Apache-2.0…

275KB
5K SLoC

io-streams

无缓冲且未上锁的 I/O 流

Github Actions CI Status crates.io page docs.rs docs

这个包定义了 StreamReaderStreamWriterStreamDuplexer 类型,这些类型提供对原始 I/O 流(如标准输入、标准输出、文件、套接字、管道或字符设备)的安全、拥有、无缓冲和未上锁的访问。它还支持“管道线程”概念,其中可以提供任意 Box<dyn Read + Send>Box<dyn Write + Send>,I/O 在线程上执行,并通过 管道 连接到 StreamReaderStreamWriter,以及“套接字线程”概念,其中提供的函数在线程上调用,并通过双向套接字连接到主线程。

此包还定义了 AsyncStreamReaderAsyncStreamWriterAsyncStreamDuplexer,它们是与 async-std 一起工作的异步函数。还有 TokioStreamReaderTokioStreamWriterTokioStreamDuplexer,它们是与 tokio 一起工作的异步函数。并非所有功能都得到了支持,并且它们还没有完全优化,但已提供基本的文件和套接字支持。

在 Posix 兼容平台上,包括对 WASI 的有限支持,这些类型只包含一个文件描述符(并实现了 AsFd),以及任何必要的资源来安全地保持文件描述符处于活动状态。在 Windows 上,它们包含一个枚举,包含 RawHandleRawSocket

由于这些类型是无缓冲的,对于大多数用例,建议将它们包装在缓冲类型中,例如 std::io::BufReaderstd::io::BufWriterstd::io::LineWriterio_streams::BufDuplexerio_streams::BufReaderLineWriter

Rust 的 std::io::Stdinstd::io::Stdout 总是带缓冲,而其 std::fs::Filestd::net::TcpStream 是无缓冲的。`io_streams` 包的主要目的是在不添加缓冲的情况下抽象底层输入和输出,以便可以应用缓冲而不会重复。

当此包打开对应的流时,它会锁定 stdio::io::Stdinstd::io::Stdout,以防止在同一个流上意外混合缓冲和非缓冲输出。当它们被锁定时尝试使用带缓冲的流将无限期阻塞。

由于异步标准和 tokio 中的 I/O 安全特性实现尚未完成,因此对 char 设备和 socketpair 的支持暂时禁用。

依赖项

~2–13MB
~164K SLoC