gpt4 book ai didi

synchronization - Rust 中有文件锁定吗?

转载 作者:行者123 更新时间:2023-11-29 07:42:16 25 4
gpt4 key购买 nike

我找不到任何类似于 Linux 中某些程序使用的文件锁定来防止多个实例运行的东西。在 Python 中,我会使用 pylockfile .

我是否忽略了 Rust 中的类似功能,或者我应该从头开始实现它?

我并不懒惰,只是想尽可能少地重新发明轮子。

最佳答案

对于现代 Rust (1.8+),你应该使用 fs2 crate .它是一个跨平台库,提供了一些标准库中没有的文件系统功能,包括文件锁定。

fs2 的文件锁定函数在内部使用 flock(2)在 UNIX 和 LockFileEx 上在 Windows 上。

例子:

//! This program tries to lock a file, sleeps for N seconds, and then unlocks the file.

// cargo-deps: fs2
extern crate fs2;

use fs2::FileExt;
use std::io::Result;
use std::env::args;
use std::fs::File;
use std::time::Duration;
use std::thread::sleep;

fn main() {
run().unwrap();
}

fn run() -> Result<()> {
let sleep_seconds = args().nth(1).and_then(|arg| arg.parse().ok()).unwrap_or(0);
let sleep_duration = Duration::from_secs(sleep_seconds);

let file = File::open("file.lock")?;

println!("{}: Preparing to lock file.", sleep_seconds);
file.lock_exclusive()?; // block until this process can lock the file
println!("{}: Obtained lock.", sleep_seconds);

sleep(sleep_duration);

println!("{}: Sleep completed", sleep_seconds);
file.unlock()?;
println!("{}: Released lock, returning", sleep_seconds);

Ok(())
}

我们可以看到这两个进程按顺序等待文件锁。

$ ./a 4 & ./a 1
[1] 14894
4: Preparing to lock file.
4: Obtained lock.
1: Preparing to lock file.
4: Sleep completed
4: Released lock, returning
1: Obtained lock.
1: Sleep completed
1: Released lock, returning
[1]+ Done ./a 4

关于synchronization - Rust 中有文件锁定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27469928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com