Trait std::os::unix::fs::FileExt 1.15.0[−][src]
pub trait FileExt { fn read_at(&self, buf: &mut [u8], offset: u64) -> Result<usize>; fn write_at(&self, buf: &[u8], offset: u64) -> Result<usize>; fn read_exact_at(&self, buf: &mut [u8], offset: u64) -> Result<()> { ... } fn write_all_at(&self, buf: &[u8], offset: u64) -> Result<()> { ... } }
Expand description
特定于 Unix 的 fs::File
扩展。
Required methods
从给定的偏移量开始读取多个字节。
返回读取的字节数。
偏移量相对于文件的开始,因此独立于当前游标。
当前文件游标不受此函数影响。
请注意,类似于 File::read
,短读返回不会出错。
Examples
use std::io; use std::fs::File; use std::os::unix::prelude::FileExt; fn main() -> io::Result<()> { let mut buf = [0u8; 8]; let file = File::open("foo.txt")?; // 现在,我们从偏移量 10 读取 8 个字节。 let num_bytes_read = file.read_at(&mut buf, 10)?; println!("read {} bytes: {:?}", num_bytes_read, buf); Ok(()) }Run
从给定的偏移量开始写入多个字节。
返回写入的字节数。
偏移量相对于文件的开始,因此独立于当前游标。
当前文件游标不受此函数影响。
当写入超出文件末尾时,将适当扩展文件,并将中间字节初始化为值 0。
请注意,与 File::write
相似,返回短写也不是错误。
Examples
use std::fs::File; use std::io; use std::os::unix::prelude::FileExt; fn main() -> io::Result<()> { let file = File::open("foo.txt")?; // 现在,我们在偏移量 10 处写入。 file.write_at(b"sushi", 10)?; Ok(()) }Run
Provided methods
从给定的偏移量读取填充 buf
所需的确切字节数。
偏移量相对于文件的开始,因此独立于当前游标。
当前文件游标不受此函数影响。
与 io::Read::read_exact
相似,但使用 read_at
代替 read
。
Errors
如果此函数遇到 io::ErrorKind::Interrupted
类型的错误,则该错误将被忽略,并且操作将继续。
如果此函数在完全填充缓冲区之前遇到 “end of file”,它将返回 io::ErrorKind::UnexpectedEof
类型的错误。
在这种情况下,buf
的内容未指定。
如果遇到任何其他读取错误,则此函数立即返回。在这种情况下,buf
的内容未指定。
如果此函数返回错误,则无法确定已读取多少字节,但读取的字节数永远不会超过完全填充缓冲区所需的字节数。
Examples
use std::io; use std::fs::File; use std::os::unix::prelude::FileExt; fn main() -> io::Result<()> { let mut buf = [0u8; 8]; let file = File::open("foo.txt")?; // 现在,我们从偏移量 10 中正好读取了 8 个字节。 file.read_exact_at(&mut buf, 10)?; println!("read {} bytes: {:?}", buf.len(), buf); Ok(()) }Run
尝试从给定的偏移量开始写入整个缓冲区。
偏移量相对于文件的开始,因此独立于当前游标。
当前文件游标不受此函数影响。
此方法将不断地调用 write_at
,直到没有更多数据要写入或返回非 io::ErrorKind::Interrupted
类型的错误为止。
在成功写入整个缓冲区或发生此类错误之前,此方法将不会返回。
将返回第一个不是由该方法生成的 io::ErrorKind::Interrupted
类型的错误。
Errors
该函数将返回 write_at
返回的第一个非 io::ErrorKind::Interrupted
类型的错误。
Examples
use std::fs::File; use std::io; use std::os::unix::prelude::FileExt; fn main() -> io::Result<()> { let file = File::open("foo.txt")?; // 现在,我们在偏移量 10 处写入。 file.write_all_at(b"sushi", 10)?; Ok(()) }Run