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