3 个版本 (1 个稳定版本)
1.0.0 | 2022年12月9日 |
---|---|
0.1.1 | 2022年11月4日 |
0.1.0 | 2022年11月2日 |
#1145 在 文件系统
797 每月下载量
110KB
2.5K SLoC
extattr
又一个 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 上并想使用 position
和 options
参数,那么 extattr
可能是一个不错的选择:)
最低支持的 Rust 版本 (MSRV)
extattr
支持 Rust 1.56.1 及以上版本。除非提高主版本号,否则 MSRV 不会改变。
贡献
欢迎所有形式的贡献,请随意提交问题或发起拉取请求!
在提交之前进行测试
-
格式化代码
$ cargo fmt
-
通过测试
$ cargo test
依赖项
~89–330KB