2 个版本

0.1.1 2024年1月9日
0.1.0 2021年10月27日

#888 in 文件系统

MIT 许可证

8KB
64

可靠地打开和锁定文件

这个 crate 提供了一种可靠地打开和锁定文件的方法,例如用于打开锁文件、PID 文件、轮询文件、邮箱以及其他用于进程间同步的文件。

OpenAndLock 特性实现了在 BSD 系统上可用的 flopen 函数的算法。它大致等同于打开一个文件并调用 flock,将 operation 参数设置为 LOCK_EX,但它还尝试检测和处理打开或创建文件与锁定之间的竞争条件。

该特性提供了两种实现,一种阻塞的,一种非阻塞的。

open_and_lock() 方法等待文件可以锁定,因此除非发生无关的 I/O 错误,否则一旦文件被释放,它最终会成功,如果它被不同的进程持有。

try_open_and_lock() 方法在文件无法锁定时立即返回错误,允许调用者处理它并在必要时重试。

这两种方法在发生竞争条件时自动重试,并且在锁定后文件被删除或重建。

此特性扩展了 OpenOptions,因此可以使用以下方式使用它

let file = OpenOptions::new()
    .read(true)
    .write(true)
    .create(true)
    .open_and_lock("/path/to/file")?;

目前,此 crate 仅支持类 UNIX 平台。

许可证

MIT 许可证,也称为 Expat 许可证。

除非您明确说明,否则您提交的任何有意包含在作品中的贡献都将按上述方式许可,不附加任何额外的条款或条件。

依赖项

~1.5MB
~36K SLoC