我需要打开一个文件,并且标志有&Path
和i32
。我可以使用File::open(path)
打开文件,但这不能让我设置选项。该文档说我应该使用OpenOptions
,但是我看不到有什么方法可以从我的OpenOptions
中获得i32
。我的标志的内容在open(2)
中定义。
如果您要自己测试,我正在使用的标记是526338
。
答案 0 :(得分:3)
假设您使用的是类似Unix的系统,则可以使用OpenOptionsExt
来设置标志:
use std::fs::OpenOptions;
use std::os::unix::fs::OpenOptionsExt;
let file = OpenOptions::new()
.read(true)
.custom_flags(flags)
.open(&path)?;
请注意,您必须单独设置访问模式标志(例如,通过调用read
或write
),因此,如果需要它们,则必须自己处理。例如:
use std::os::unix::fs::OpenOptionsExt;
use libc::{O_RDONLY, O_RDWR, O_WRONLY};
let file = OpenOptions::new()
.custom_flags(flags)
.read((flags & O_ACCMODE == O_RDONLY) || (flags & O_ACCMODE == O_RDWR))
.write((flags & O_ACCMODE == O_WRONLY) || (flags & O_ACCMODE == O_RDWR))
.open(&path)?;