flock.c 801 B

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