是否生锈';s标准库是否支持直接IO文件访问?

是否生锈';s标准库是否支持直接IO文件访问?,io,rust,buffer,Io,Rust,Buffer,有没有办法用Rust的标准库指定O\u DIRECT,或者您需要使用它?您可以使用Unix特有的扩展特性: 然而,O_DIRECT的值是特定于平台的。我可能最终会使用libc来提供值。我能够让您的示例运行,但只要我添加.create(true)我就得到IO(Os{code:22,kind:InvalidInput,message:“Invalid argument”})@fall不确定,再加上一页左右的“阅读这篇关于O_DIRECT”我找不到关于ext4或tmpfs(这似乎不太可能)是否支持直接

有没有办法用Rust的标准库指定
O\u DIRECT
,或者您需要使用它?

您可以使用Unix特有的扩展特性:


然而,
O_DIRECT
的值是特定于平台的。我可能最终会使用libc来提供值。

我能够让您的示例运行,但只要我添加
.create(true)
我就得到
IO(Os{code:22,kind:InvalidInput,message:“Invalid argument”})
@fall不确定,再加上一页左右的“阅读这篇关于
O_DIRECT
”我找不到关于ext4或tmpfs(这似乎不太可能)是否支持直接IO的定义性答案,但当我添加
.create(true)
标志时,它们都不起作用。我最终使用了一个原始块设备(
/dev/nvme0n1p3
-我的nvme驱动器),由于我不再需要create标志,该设备工作正常。在内核5.4.2上,O_DIRECT在
tmpfs
上不工作,但在
btrfs
上工作。
use std::{fs::OpenOptions, os::unix::fs::OpenOptionsExt};

const O_DIRECT: i32 = 0o0040000; // Double check value

fn main() {
    OpenOptions::new()
        .read(true)
        .custom_flags(O_DIRECT)
        .open("/etc/passwd")
        .expect("Can't open");
}