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)
}
|