3 个版本 (1 个稳定版本)

1.0.0 2022年12月9日
0.1.1 2022年11月4日
0.1.0 2022年11月2日

#1145文件系统

Download history 415/week @ 2024-03-13 352/week @ 2024-03-20 217/week @ 2024-03-27 171/week @ 2024-04-03 266/week @ 2024-04-10 180/week @ 2024-04-17 187/week @ 2024-04-24 179/week @ 2024-05-01 137/week @ 2024-05-08 159/week @ 2024-05-15 87/week @ 2024-05-22 315/week @ 2024-05-29 157/week @ 2024-06-05 215/week @ 2024-06-12 152/week @ 2024-06-19 173/week @ 2024-06-26

797 每月下载量

GPL-2.0-only

110KB
2.5K SLoC

extattr

Cirrus Build Status crates.io Crates.io docs.rs MSRV License

又一个 Rust 的扩展属性库。

目录

支持的平台及其文档

为什么还需要另一个 EA crate?与 xattr 有何不同?

扩展属性系统调用在不同实现中有所不同,例如,要设置一个 EA

// Linux
int setxattr(const char *path, const char *name, const void *value, 
             size_t size, int flags);

// FreeBSD
ssize_t extattr_set_file(const char *path, int attrnamespace,
	 const char *attrname, const void *data, size_t	nbytes);

// macOS
int setxattr(const char *path, const char *name, void *value, size_t size,
         u_int32_t position, int options);

xattr 抹去了这些 API 之间的差异,提供了一个一致的 Rust 接口。

// A consistent API that would work on every OS
pub fn set<N, P>(path: P, name: N, value: &[u8]) -> Result<()> 

extattr 努力提供接近原生的绑定。

// Linux
pub fn setxattr<P, S, B>(
    path: P,
    name: S,
    value: B,
    flags: Flags,
) -> Result<()>

// FreeBSD
pub fn extattr_set_file<P, S, B>(
    path: P,
    attrnamespace: AttrNamespace,
    attrname: S,
    data: B
) -> Result<()>

// macOS
pub fn setxattr<P, S, B>(
    path: P,
    name: S,
    value: B,
    position: u32,
    options: Options
) -> Result<()>

在大多数情况下,你可能会想使用 xattr 而不是 extattr。然而,如果你在 Linux 上并想使用那个额外的 flags 参数,或者你在 macOS 上并想使用 positionoptions 参数,那么 extattr 可能是一个不错的选择:)

最低支持的 Rust 版本 (MSRV)

extattr 支持 Rust 1.56.1 及以上版本。除非提高主版本号,否则 MSRV 不会改变。

贡献

欢迎所有形式的贡献,请随意提交问题或发起拉取请求!

在提交之前进行测试
  1. 格式化代码

    $ cargo fmt
    
  2. 通过测试

    $ cargo test
    

依赖项

~89–330KB