Rust中是否有文件锁定?

yan

我找不到类似于文件锁定的东西,就像Linux中使用某些程序来阻止多个实例运行一样。在Python中,我将使用pylockfile

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

我并不懒惰,只是在尝试尽可能减少车轮数量。

肯尼

对于当代Rust(1.8+),应使用fs2crate它是一个跨平台的库,提供了一些标准库中找不到的文件系统功能,包括文件锁定。

fs2的文件锁定功能flock(2)在UNIX和LockFileExWindows内部使用

例子:

//! 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

测试文件是否被锁定

来自分类Dev

是否可以取消锁定货物中的文件?

来自分类Dev

iOS中是否有任何类型的部分唤醒锁定机制?

来自分类Dev

iOS中是否有任何类型的部分唤醒锁定机制?

来自分类Dev

Powershell:检查文件是否被锁定

来自分类Dev

如何检查文件是否被锁定?

来自分类Dev

Powershell:检查文件是否被锁定

来自分类Dev

新的File(“ ...”)是否锁定文件?

来自分类Dev

flock():是否可以仅检查文件是否已被锁定,而实际上没有获取该锁定?

来自分类Dev

R中的文件锁定

来自分类Dev

在Bash中锁定文件

来自分类Dev

PHP中的锁定文件

来自分类Dev

在robotframework中锁定文件

来自分类Dev

是否有liquibase锁定超时?

来自分类Dev

尝试重命名/删除文件时,Linux是否具有文件锁定保护功能

来自分类Dev

在Windows的Rust 2018中检查文件是否是符号链接

来自分类Dev

锁定MKS中的多个文件

来自分类Dev

Rust中是否有类似表达式模板的内容?

来自分类Dev

是否可以在Rust中返回借用或拥有的类型?

来自分类Dev

Rust中是否有类似JavaScript的substr的方法?

来自分类Dev

文字整数值在Rust中是否具有特定类型?

来自分类Dev

是否有Rust等效于C ++中的clock函数?

来自分类Dev

R中是否有类似于Rust模式语法的内容?

来自分类Dev

在Rust中是否有丢弃输入的标准方法?

来自分类Dev

Rust中是否有C#的nameof()类似物?

来自分类Dev

是否有可能在Rust中引起内存泄漏?

来自分类Dev

R中是否有类似于Rust模式语法的内容?

来自分类Dev

Rust中是否有C#的nameof()类似物?

来自分类Dev

在 Rust 中是否有任何等效于 JavaScript 的 forEach?

Related 相关文章

热门标签

归档