# Simple, Lightweight File Locking
This crate provides an extremely lean implementation of file locking for
`#[cfg(unix)]` (using the [`libc`](https://crates.io/crates/libc) crate)
and `#[cfg(windows)]` (using the
[`windows-sys`](https://crates.io/crates/windows-sys) crate) systems.
The API is exposed as a single extension trait for `std::fs::File` called
`FileExt`. Simply bring the trait into scope, and you can lock files to
your heart's content:
```
use std::fs::{ File };
use file_locking::{ FileExt };
let f = File::options()
.create(true)
.write(true)
.open("database.lock")?;
{
let _guard = f.lock_exclusive()?;
// ... do some stuff with the knowledge that nobody else can lock the file ...
}
// the lock is now released and can be taken again by somebody else c:
```
## Portability
Some unavoidable behavior differences exist between platforms. To summarize:
- Don't count on file locks to prevent read or write access to a file, but
be prepared for them to.
- Don't lock the same on-disk file through the same `File`
object more than once.
## License
This project is made available under the terms of the MIT license. See `LICENSE.md` for details.
## Contributing
Bug reports, feature requests, and patch submissions are welcome at
[contact@echowritescode.dev](mailto:contact@echowritescode.dev).