2 个版本
0.1.1 | 2024年1月9日 |
---|---|
0.1.0 | 2021年10月27日 |
#888 in 文件系统
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