You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
801 B
40 lines
801 B
4 months ago
|
/* 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");
|
||
|
}
|
||
|
}
|