2个不稳定版本
0.2.0 | 2024年6月23日 |
---|---|
0.1.1 | 2024年6月23日 |
0.1.0 |
|
在文件系统类别中排名第461
每月下载量73次
33KB
671 行
async-fd-lock
使用文件描述符提供跨平台文件锁的咨询性支持,通过将阻塞操作卸载到新启动的阻塞任务中实现异步支持。由yoshuawuyts/fd-lock改编而来,该库又是由mafintosh/fd-lock改编而来。
请注意,咨询性锁的兼容性是可选的,并且可以被其他各方自由忽略。这意味着这个crate 绝对不应用于安全目的,而仅用于协调文件访问。
示例
基本用法
use std::path::PathBuf;
use tokio::fs::File;
use tokio::io::{AsyncReadExt, AsyncWriteExt};
use async_fd_lock::{LockRead, LockWrite};
let dir = tempfile::tempdir().unwrap();
let path = dir.path().join("foo.txt");
// Lock it for writing.
{
let mut write_guard = File::options()
.create_new(true)
.write(true)
.truncate(true)
.open(&path).await?
.lock_write().await
.map_err(|(_, err)| err)?;
write_guard.write(b"bongo cat").await?;
}
// Lock it for reading.
{
let mut read_guard_1 = File::open(&path).await?.lock_read().await.map_err(|(_, err)| err)?;
let mut read_guard_2 = File::open(&path).await?.lock_read().await.map_err(|(_, err)| err)?;
let byte_1 = read_guard_1.read_u8().await?;
let byte_2 = read_guard_2.read_u8().await?;
}
安装
$ cargo add async-fd-lock
安全性
该crate在Windows上使用unsafe
与windows-sys
接口。所有不变量都已仔细检查,并手动强制实施。
参考资料
许可
MIT OR Apache-2.0
依赖
~2–13MB
~167K SLoC