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
1,078 每月下载量
在 17 个 Crates 中使用 (8 个直接使用)
37KB
839 行
cluFlock
数据流的安装和后续安全删除 flock
锁。
使用
- 独占 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( () )
}
- 独占 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(())
}
- 独占 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( () )
}
- 共享 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( () )
}
平台支持
- Unix, Linux:全面支持:SharedFlock (Wait, Try),ExclusiveFlock (Wait, Try),Unlock (Wait, Try)。
- Windows:全面支持:SharedFlock (Wait, Try),ExclusiveFlock (Wait, Try),Unlock (Wait, !Try)。Unlock Try 未实现,被视为额外的非安全功能。
平台功能
- Unix, Linux:flock 系统调用仅在进程间工作,进程内部没有锁。
- Windows:系统调用(LockFileEx UnlockFileEx)在进程间和当前进程内部工作。如果您使用共享和独占锁,您可以在同一进程中锁定自己。
许可证
版权 2021 #UlinProject Denis Kotlyarov (Денис Котляров)
根据 Apache 许可证版本 2.0 许可
依赖
~215KB