如何写大于2 GB的文件?

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字节限制.

我怎么能绕过这个?我想写一个更大的文件.:)

hel*_*low 6

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下运行程序,那么运行就好了.