Tob*_*ann 3 filesystems file-io file rust
以下代码:
use std::fs::File;
use std::io::Write;
fn main() {
let encoded: Vec<u8> = vec![0; 2500000000];
let mut buffer = File::create("file.bin").unwrap();
let written_bytes = buffer.write(&encoded).unwrap();
assert_eq!(written_bytes, encoded.len());
}
Run Code Online (Sandbox Code Playgroud)
错误:
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `2147479552`,
right: `2500000000`', src/main.rs:8:5
Run Code Online (Sandbox Code Playgroud)
因此似乎存在2^31 - 4096字节限制.
我怎么能绕过这个?我想写一个更大的文件.:)
Rusts write依赖底层操作系统来写入字节.
对于Linux系统,将使用write syscall.
根据POSIX.1,如果
count大于SSIZE_MAX,则结果是实现定义的; 请参阅NOTES以了解Linux的上限.
笔记:
在Linux上,
write()(和类似的系统调用)最多将传输0x7ffff000(2,147,479,552)个字节,返回实际传输的字节数.(在32位和64位系统上都是如此.)
所以有神奇的数字来自.
为避免出现问题,请使用write_all而不是write确保写入所有字节.
注意:如果你在Windows下运行程序,那么运行就好了.