blob: 5f0190a9e287021e33fecbd93ee968697c2e0138 [file] [log] [blame]
/* flock.c - manage advisory file locks
*
* Copyright 2015 The Android Open Source Project
USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN))
config FLOCK
bool "flock"
default y
help
usage: flock [-sxun] fd
Manage advisory file locks.
-s Shared lock.
-x Exclusive lock (default).
-u Unlock.
-n Non-blocking: fail rather than wait for the lock.
*/
#define FOR_flock
#include "toys.h"
#include <sys/file.h>
void flock_main(void)
{
int fd = xstrtol(*toys.optargs, NULL, 10), op;
if (toys.optflags & FLAG_u) op = LOCK_UN;
else op = (toys.optflags & FLAG_s) ? LOCK_SH : LOCK_EX;
if (toys.optflags & FLAG_n) op |= LOCK_NB;
if (flock(fd, op)) {
if ((op & LOCK_NB) && errno == EAGAIN) toys.exitval = 1;
else perror_exit("flock");
}
}