aboutsummaryrefslogtreecommitdiff
path: root/locker_unix.go
blob: 8d08751afac8729eb7d5855e748216d6f1b75f3f (plain) (blame)
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
//go:build !windows
// +build !windows

package fqueue

import "golang.org/x/sys/unix"

func lock(fd int, wait bool) error {
	lock := unix.Flock_t{
		Type:   unix.F_WRLCK, // эксклюзивная блокировка записи
		Whence: 0,            // SEEK_SET
		Start:  0,
		Len:    0, // блокируем весь файл
	}
	cmd := unix.F_SETLK
	if wait {
		cmd = unix.F_SETLKW // блокирующий вызов
	}
	return unix.FcntlFlock(uintptr(fd), cmd, &lock)
}

func unlock(fd int) error {
	lock := unix.Flock_t{
		Type:   unix.F_UNLCK,
		Whence: 0,
		Start:  0,
		Len:    0,
	}
	return unix.FcntlFlock(uintptr(fd), unix.F_SETLK, &lock)
}