Implement -o for flock(1) to close fd before exec
This commit is contained in:
parent
09c3caa56d
commit
7b9988c7ff
5
flock.1
5
flock.1
@ -6,7 +6,7 @@
|
||||
.Nd tool to manage locks on files
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl nsux
|
||||
.Op Fl nosux
|
||||
.Ar file
|
||||
.Ar cmd Op arg ...
|
||||
.Sh DESCRIPTION
|
||||
@ -20,6 +20,9 @@ does not exist, it will be created.
|
||||
.It Fl n
|
||||
Set non-blocking mode on the lock. Fail immediately if the lock
|
||||
cannot be acquired.
|
||||
.It Fl o
|
||||
Close the file descriptor before exec to avoid having the exec'ed
|
||||
program holding on to the lock.
|
||||
.It Fl s
|
||||
Acquire a shared lock.
|
||||
.It Fl u
|
||||
|
9
flock.c
9
flock.c
@ -12,19 +12,22 @@
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
eprintf("usage: %s [-nsux] file cmd [arg ...]\n", argv0);
|
||||
eprintf("usage: %s [-nosux] file cmd [arg ...]\n", argv0);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int fd, status, savederrno, flags = LOCK_EX, nonblk = 0;
|
||||
int fd, status, savederrno, flags = LOCK_EX, nonblk = 0, oflag = 0;
|
||||
pid_t pid;
|
||||
|
||||
ARGBEGIN {
|
||||
case 'n':
|
||||
nonblk = LOCK_NB;
|
||||
break;
|
||||
case 'o':
|
||||
oflag = 1;
|
||||
break;
|
||||
case 's':
|
||||
flags = LOCK_SH;
|
||||
break;
|
||||
@ -54,6 +57,8 @@ main(int argc, char *argv[])
|
||||
case -1:
|
||||
eprintf("fork:");
|
||||
case 0:
|
||||
if (oflag && close(fd) < 0)
|
||||
eprintf("close:");
|
||||
argv++;
|
||||
execvp(*argv, argv);
|
||||
savederrno = errno;
|
||||
|
Loading…
Reference in New Issue
Block a user