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.
47 lines
850 B
47 lines
850 B
/*
|
|
* $Id: lock.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
|
|
*
|
|
* Copyright (C) 1997 Lars Fenneberg
|
|
*
|
|
* See the file COPYRIGHT for the respective terms and conditions.
|
|
* If the file is missing contact me at lf@elemental.net
|
|
* and I'll send you a copy.
|
|
*
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
|
|
int do_lock_exclusive(int fd)
|
|
{
|
|
struct flock fl;
|
|
int res;
|
|
|
|
memset((void *)&fl, 0, sizeof(fl));
|
|
|
|
fl.l_type = F_WRLCK;
|
|
fl.l_whence = fl.l_start = 0;
|
|
fl.l_len = 0; /* 0 means "to end of file" */
|
|
|
|
res = fcntl(fd, F_SETLK, &fl);
|
|
|
|
if ((res == -1) && (errno == EAGAIN))
|
|
errno = EWOULDBLOCK;
|
|
|
|
return res;
|
|
}
|
|
|
|
int do_unlock(int fd)
|
|
{
|
|
struct flock fl;
|
|
|
|
memset((void *)&fl, 0, sizeof(fl));
|
|
|
|
fl.l_type = F_UNLCK;
|
|
fl.l_whence = fl.l_start = 0;
|
|
fl.l_len = 0; /* 0 means "to end of file" */
|
|
|
|
return fcntl(fd, F_SETLK, &fl);
|
|
}
|