[][src]Function fcntl::lock_file

pub fn lock_file<'a, RF>(
    fd: &'a RF,
    flock: Option<flock>,
    locktype: Option<FcntlLockType>
) -> Result<bool, FcntlError> where
    RF: AsRawFd

Locks the given file (using FcntlCmd::SetLock). If flock is None all parameters of the flock structure ( l_whence, l_start, l_len, l_pid) will be set to 0. locktype controls the l_type parameter. When it is None, FcntlLockType::Read is used. flock.l_type will be overwritten in all cases to avoid passing an invalid parameter to the syscall.

The caller is responsible that fd was opened with the appropriate parameters, as stated by fcntl 2:

In order to place a read lock, fd must be open for reading. In order to place a write lock, fd must be open for writing. To place both types of lock, open a file read-write.

use std::fs::OpenOptions;
use fcntl::{FcntlLockType, lock_file};

let file = OpenOptions::new().read(true).write(true).open(file_name).unwrap();
match lock_file(&file, None, Some(FcntlLockType::Write)) {
    Ok(true) => println!("Lock acuired!"),
    Ok(false) => println!("Could not acquire lock!"),
    Err(err) => println!("Error: {:?}", err),
}