当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Write.write_all_vectored用法及代码示例


本文简要介绍rust语言中 std::io::Write.write_all_vectored 的用法。

用法

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>

尝试将多个缓冲区写入此写入器。

此方法将不断调用 write_vectored ,直到没有更多数据要写入或返回非 ErrorKind::Interrupted 类型的错误。在所有缓冲区都已成功写入或发生此类错误之前,此方法不会返回。将返回由该方法生成的第一个不属于 ErrorKind::Interrupted 类型的错误。

如果缓冲区不包含数据,则永远不会调用 write_vectored

注意

不像std::io::Write.write_vectored,这需要一个可变的引用切片IoSlices,不是一成不变的。这是因为我们需要修改切片以跟踪已写入的字节。

此函数返回后,bufs 的内容未指定,因为这取决于需要多少次调用 write_vectored 。最好将此函数理解为拥有bufs 的所有权,之后不要使用bufs IoSlice s 指向的底层缓冲区(但不是 IoSlice s 本身)不变并且可以重复使用。

例子

#![feature(write_all_vectored)]

use std::io::{Write, IoSlice};

let mut writer = Vec::new();
let bufs = &mut [
    IoSlice::new(&[1]),
    IoSlice::new(&[2, 3]),
    IoSlice::new(&[4, 5, 6]),
];

writer.write_all_vectored(bufs)?;
// Note: the contents of `bufs` is now undefined, see the Notes section.

assert_eq!(writer, &[1, 2, 3, 4, 5, 6]);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::io::Write.write_all_vectored。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。