3 unstable releases
new 0.2.1 | Mar 10, 2025 |
---|---|
0.2.0 | Mar 8, 2025 |
0.1.0 | Feb 9, 2022 |
#155 in Filesystem
2,838 downloads per month
Used in 4 crates
(3 directly)
17KB
229 lines
fmutex
Mutual exclusion across processes on a file descriptor or path.
- On Unix-like systems this is implemented use
flock(2)
. - On Windows this is implemented using
LockFileEx
.
🚀 Getting started
First fmutex
to your Cargo manifest.
cargo add fmutex
Now use one of the provided functions to lock a file descriptor (Unix) or handle (Windows) or a file path.
lock()
to acquire a lock on a file descriptor or handle.try_lock()
to attempt to acquire a lock on a file descriptor or handle.lock_path()
to acquire a lock on a file path.try_lock_path()
to attempt to acquire a lock on a file path.
🤸 Usage
lock()
let fd = fs::OpenOptions::new().create(true).write(true).open(&path)?;
{
let _guard = fmutex::lock(&fd)?;
// do mutually exclusive stuff here
} // <-- `_guard` dropped here and the lock is released
try_lock()
let fd = fs::OpenOptions::new().create(true).write(true).open(&path)?;
match fmutex::try_lock(&fd)? {
Some(_guard) => {
// do mutually exclusive stuff here
} // <-- `_guard` dropped here and the lock is released
None => {
eprintln!("the lock could not be acquired!");
}
}
lock_path()
let path = "path/to/my/file.txt";
{
let _guard = fmutex::lock_path(path)?;
// do mutually exclusive stuff here
} // <-- `_guard` dropped here and the lock is released
try_lock_path()
let path = "path/to/my/file.txt";
match fmutex::try_lock_path(path)? {
Some(_guard) => {
// do mutually exclusive stuff here
} // <-- `_guard` dropped here and the lock is released
None => {
eprintln!("the lock could not be acquired!");
}
}
License
This project is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.
Dependencies
~0–7.5MB
~53K SLoC