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