6 个版本

0.2.4 2022 年 3 月 20 日
0.2.3 2020 年 4 月 1 日
0.2.2 2020 年 3 月 18 日
0.1.0 2020 年 3 月 13 日

#174 in 文件系统

Download history 19644/week @ 2024-03-14 18398/week @ 2024-03-21 17358/week @ 2024-03-28 16268/week @ 2024-04-04 18499/week @ 2024-04-11 17819/week @ 2024-04-18 15526/week @ 2024-04-25 17284/week @ 2024-05-02 15744/week @ 2024-05-09 16744/week @ 2024-05-16 14634/week @ 2024-05-23 17786/week @ 2024-05-30 16223/week @ 2024-06-06 18306/week @ 2024-06-13 19355/week @ 2024-06-20 13402/week @ 2024-06-27

70,600 每月下载量
60 Crates 中使用(直接使用 16 个)

MIT 许可证

23KB
352

Cargo Documentation CI

faccess

Rust 的基本跨平台文件可访问性检查。

概要

pub trait PathExt {
    fn access(&self, mode: AccessMode) -> std::io::Result<()>;
    fn readable(&self) -> bool;
    fn writable(&self) -> bool;
    fn executable(&self) -> bool;
}

impl PathExt for std::path::Path;

描述

faccessstd::path::Path 提供了一个扩展 trait,该 trait 添加了一个 access 方法,用于检查给定访问权限的路径的可访问性——一个或多个 AccessMode 标志(EXISTSREADWRITEEXECUTE)的按位或。

如果只需检查单个权限,它还提供了便利方法 readablewritableexecutable

示例

use std::path::Path;
use faccess::{AccessMode, PathExt};

let path = Path::new("/bin/ls");

assert!(path.access(AccessMode::READ | AccessMode::EXECUTE).is_ok());
assert!(path.readable());
assert!(!path.writable());
assert!(path.executable());

平台特定行为

在 Unix 平台上,access 直接映射到 faccessat(2),如果可用,使用 AT_EACCESS 标志来测试有效用户和组 ID。

在 Windows 上,使用复杂自定义实现来近似这些语义,以最佳努力的方式使用文件扩展名检查、尝试简单打开文件、GetNamedSecurityInfoWAccessCheck,具体取决于正在检查的权限。这与在其他语言中找到的实现类似。

在其他平台上,它简单地代理到 exists()readonly(),根据需要。

注意事项

此类函数存在时间检查到时间使用(TOCTOU)错误的历史,特别是依赖于此类函数来在代表其他用户访问文件之前验证有效用户/组权限的set-user-ID程序。在安全环境中不应依赖于这些函数。

依赖关系

~72–315KB