7 个版本 (3 个稳定版本)

1.2.7 2022 年 2 月 15 日
1.2.5 2019 年 9 月 18 日
1.2.4 2019 年 8 月 31 日
0.2.2 2019 年 4 月 7 日
0.1.5 2018 年 11 月 12 日

#55 in FFI

Download history 261/week @ 2024-03-11 223/week @ 2024-03-18 225/week @ 2024-03-25 389/week @ 2024-04-01 189/week @ 2024-04-08 197/week @ 2024-04-15 207/week @ 2024-04-22 313/week @ 2024-04-29 140/week @ 2024-05-06 138/week @ 2024-05-13 139/week @ 2024-05-20 153/week @ 2024-05-27 193/week @ 2024-06-03 206/week @ 2024-06-10 203/week @ 2024-06-17 299/week @ 2024-06-24

1,078 每月下载量
17 个 Crates 中使用 (8 个直接使用)

Apache-2.0

37KB
839

cluFlock

Build Status Platform Apache licensed Documentation

数据流的安装和后续安全删除 flock 锁。

使用

  1. 独占 LockFile
use cluFlock::ToFlock;
use std::fs::File;
use std::io;

fn main() -> Result<(), io::Error> {
	let file_lock = File::create("./file")?.wait_exclusive_lock()?;
	println!("{:?}", file_lock);
	
	Ok( () )
}
  1. 独占 LockFile (FnOnce)
use std::io::Write;
use cluFlock::ToFlock;
use std::fs::File;
use std::io;

fn main() -> Result<(), io::Error> {
	File::create("./file")?.wait_exclusive_lock_fn(
		// valid exclusive lock
		|mut file| write!(file, "Test."), // result: Ok(usize)/Err(std::io::Error)
		
		// invalid lock
		|err| Err(err.into_err()) // into_err: FlockErr -> std::io::Error
	)?;
	
	Ok(())
}
  1. 独占 LockFile (&File)
use cluFlock::ExclusiveFlock;
use std::fs::File;

fn main() -> Result<(), std::io::Error> {
	let file = File::create("./file")?;
	
	{
		let file_lock = ExclusiveFlock::wait_lock(&file)?;
		// file_lock, type: FlockLock<&File>

		println!("{:?}", file_lock);
	} // auto unlock ExclusiveFlock

	file.sync_all()?;

	Ok( () )
}
  1. 共享 LockFile (&File)
use std::fs::File;
use cluFlock::SharedFlock;
use std::io;

fn main() -> Result<(), io::Error> {
	let file = File::create("./test_file")?;
	
	let shared = SharedFlock::wait_lock(&file);
	println!("#1shared {:?}", shared);
	let shared2 = SharedFlock::try_lock(&file);
	println!("#2shared {:?}", shared2);
	
	assert_eq!(shared.is_ok(), true);
	assert_eq!(shared2.is_ok(), true);
	
	// manual or automatic unlock SharedFlock_x2
	// drop(shared);
	// drop(shared2);
	
	Ok( () )
}

平台支持

  1. Unix, Linux:全面支持:SharedFlock (Wait, Try),ExclusiveFlock (Wait, Try),Unlock (Wait, Try)。
  2. Windows:全面支持:SharedFlock (Wait, Try),ExclusiveFlock (Wait, Try),Unlock (Wait, !Try)。Unlock Try 未实现,被视为额外的非安全功能。

平台功能

  1. Unix, Linux:flock 系统调用仅在进程间工作,进程内部没有锁。
  2. Windows:系统调用(LockFileEx UnlockFileEx)在进程间和当前进程内部工作。如果您使用共享和独占锁,您可以在同一进程中锁定自己。

许可证

版权 2021 #UlinProject Denis Kotlyarov (Денис Котляров)

根据 Apache 许可证版本 2.0 许可

依赖

~215KB