pub trait PermissionsExt {
    // Required methods
    fn mode(&self) -> u32;
    fn set_mode(&mut self, mode: u32);
    fn from_mode(mode: u32) -> Self;
}Available on Unix only.
Expand description
Unix-specific extensions to fs::Permissions.
§Examples
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);Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.