pub trait PermissionsExt {
// Required methods
fn mode(&self) -> u32;
fn set_mode(&mut self, mode: u32);
fn from_mode(mode: u32) -> Self;
}
Unix-specific extensions to fs::Permissions.
use std::fs::{File, Permissions};
use std::io::{ErrorKind, Result as IoResult};
use std::os::unix::fs::PermissionsExt;
fn main() -> IoResult<()> {
let name = "test_file_for_permissions";
// make sure file does not exist
let _ = std::fs::remove_file(name);
assert_eq!(
File::open(name).unwrap_err().kind(),
ErrorKind::NotFound,
"file already exists"
);
// full read/write/execute mode bits for owner of file
// that we want to add to existing mode bits
let my_mode = 0o700;
// create new file with specified permissions
{
let file = File::create(name)?;
let mut permissions = file.metadata()?.permissions();
eprintln!("Current permissions: {:o}", permissions.mode());
// make sure new permissions are not already set
assert!(
permissions.mode() & my_mode != my_mode,
"permissions already set"
);
// either use `set_mode` to change an existing Permissions struct
permissions.set_mode(permissions.mode() | my_mode);
// or use `from_mode` to construct a new Permissions struct
permissions = Permissions::from_mode(permissions.mode() | my_mode);
// write new permissions to file
file.set_permissions(permissions)?;
}
let permissions = File::open(name)?.metadata()?.permissions();
eprintln!("New permissions: {:o}", permissions.mode());
// assert new permissions were set
assert_eq!(
permissions.mode() & my_mode,
my_mode,
"new permissions not set"
);
Ok(())
}use std::fs::Permissions; use std::os::unix::fs::PermissionsExt; // read/write for owner and read for others let my_mode = 0o644; let mut permissions = Permissions::from_mode(my_mode); assert_eq!(permissions.mode(), my_mode); // read/write/execute for owner let other_mode = 0o700; permissions.set_mode(other_mode); assert_eq!(permissions.mode(), other_mode);
fn mode(&self) -> u32
Returns the mode permission bits
fn set_mode(&mut self, mode: u32)
Sets the mode permission bits.
fn from_mode(mode: u32) -> Self
Creates a new instance from the given mode permission bits.
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
impl PermissionsExt for Permissions
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/os/unix/fs/trait.PermissionsExt.html