是否生锈';s标准库是否支持直接IO文件访问?
有没有办法用Rust的标准库指定是否生锈';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(这似乎不太可能)是否支持直接
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");
}