/* 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"); } }