Expand description
Installation and subsequent safe removal of flock
locks for data streams.
§Use
- Exclusive 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( () )
}
- Exclusive 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(())
}
- Exclusive 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( () )
}
- Shared 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( () )
}
§Support of platforms:
- Unix, Linux: Full support: SharedFlock (Wait, Try), ExclusiveFlock (Wait, Try), Unlock (Wait, Try).
- Windows: Full support: SharedFlock (Wait, Try), ExclusiveFlock (Wait, Try), Unlock (Wait, !Try). Unlock Try is not implemented and is considered additional unsafe functionality.
§Features of platforms:
- Unix, Linux: The flock system call only works between processes, there are no locks inside the process.
- Windows: System calls (LockFileEx UnlockFileEx) work between processes and within the current process. If you use Shared and Exclusive locks, you can lock yourself in the same process.
§License
Copyright 2021 #UlinProject Denis Kotlyarov (Денис Котляров)
Licensed under the Apache License, Version 2.0
Modules§
- element
- FlockElement is required to implement additional Flock locks.
- err
- Error structures used in cluFlock methods.
- unlock
Structs§
- Flock
Lock - Type for securely creating and securely managing ‘flock’ locks.
Traits§
- Exclusive
Flock - Set exclusive lock. Only one process can hold a data flow lock.
- Shared
Flock - Set common lock, common locks can be many. An exclusive lock will wait for all shared locks to complete.
- ToFlock
- Convenient conversion of previously used values to cluFlock.