OSDN Git Service

Add missing liblog dependency
[android-x86/external-toybox.git] / toys / other / flock.c
1 /* flock.c - manage advisory file locks
2  *
3  * Copyright 2015 The Android Open Source Project
4
5 USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN))
6
7 config FLOCK
8   bool "flock"
9   default y
10   help
11     usage: flock [-sxun] fd
12
13     Manage advisory file locks.
14
15     -s  Shared lock.
16     -x  Exclusive lock (default).
17     -u  Unlock.
18     -n  Non-blocking: fail rather than wait for the lock.
19 */
20
21 #define FOR_flock
22 #include "toys.h"
23
24 #include <sys/file.h>
25
26 void flock_main(void)
27 {
28   int fd = xstrtol(*toys.optargs, NULL, 10), op;
29
30   if (toys.optflags & FLAG_u) op = LOCK_UN;
31   else op = (toys.optflags & FLAG_s) ? LOCK_SH : LOCK_EX;
32
33   if (toys.optflags & FLAG_n) op |= LOCK_NB;
34
35   if (flock(fd, op)) {
36     if ((op & LOCK_NB) && errno == EAGAIN) toys.exitval = 1;
37     else perror_exit("flock");
38   }
39 }