File: filelock.cpp

package info (click to toggle)
libwibble 1.1-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 1,040 kB
  • ctags: 2,721
  • sloc: cpp: 14,542; makefile: 196; perl: 87; sh: 26
file content (37 lines) | stat: -rw-r--r-- 645 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <wibble/sys/filelock.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <wibble/exception.h>

#ifdef POSIX

namespace wibble {
namespace sys {
namespace fs {

FileLock::FileLock(int fd, short l_type, short l_whence, off_t l_start, off_t l_len)
    : fd(fd)
{
    lock.l_type = l_type;
    lock.l_whence = l_whence;
    lock.l_start = l_start;
    lock.l_len = l_len;
    if (fcntl(fd, F_SETLKW, &lock) == -1)
        throw wibble::exception::System("locking file");
}

FileLock::~FileLock()
{
    lock.l_type = F_UNLCK;
    fcntl(fd, F_SETLK, &lock);
}

}
}
}

#endif

// vim:set ts=4 sw=4: