#文件描述符 #异步 #文件锁 # #fd #文件访问 #文件I/O

async-fd-lock

通过启动阻塞任务使用文件描述符提供跨平台文件锁的咨询性支持

2个不稳定版本

0.2.0 2024年6月23日
0.1.1 2024年6月23日
0.1.0 2024年6月23日

文件系统类别中排名第461

Download history 304/week @ 2024-06-17 92/week @ 2024-06-24 32/week @ 2024-07-08 2/week @ 2024-07-15 31/week @ 2024-07-22 37/week @ 2024-07-29 5/week @ 2024-08-12

每月下载量73

MIT/Apache

33KB
671

async-fd-lock

crates.io version downloads docs.rs docs

使用文件描述符提供跨平台文件锁的咨询性支持,通过将阻塞操作卸载到新启动的阻塞任务中实现异步支持。由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上使用unsafewindows-sys接口。所有不变量都已仔细检查,并手动强制实施。

参考资料

许可

MIT OR Apache-2.0

依赖

~2–13MB
~167K SLoC