diff options
Diffstat (limited to 'src/libbbsutil/lock.c')
-rw-r--r-- | src/libbbsutil/lock.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/libbbsutil/lock.c b/src/libbbsutil/lock.c new file mode 100644 index 00000000..4b28bab1 --- /dev/null +++ b/src/libbbsutil/lock.c @@ -0,0 +1,23 @@ +#include <fcntl.h> +#include <unistd.h> +#include <errno.h> + +/** + * lock fd + * @param mode F_WRLCK, F_UNLCK + */ +void +PttLock(int fd, int start, int size, int mode) +{ + static struct flock lock_it; + int ret; + + lock_it.l_whence = SEEK_CUR;/* from current point */ + lock_it.l_start = start; /* -"- */ + lock_it.l_len = size; /* length of data */ + lock_it.l_type = mode; /* set exclusive/write lock */ + lock_it.l_pid = 0; /* pid not actually interesting */ + while ((ret = fcntl(fd, F_SETLKW, &lock_it)) < 0 && errno == EINTR) + sleep(1); +} + |