...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package fileutil
19
20 import (
21 "os"
22 "syscall"
23 )
24
25 func flockTryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) {
26 f, err := os.OpenFile(path, flag, perm)
27 if err != nil {
28 return nil, err
29 }
30 if err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err != nil {
31 f.Close()
32 if err == syscall.EWOULDBLOCK {
33 err = ErrLocked
34 }
35 return nil, err
36 }
37 return &LockedFile{f}, nil
38 }
39
40 func flockLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) {
41 f, err := os.OpenFile(path, flag, perm)
42 if err != nil {
43 return nil, err
44 }
45 if err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX); err != nil {
46 f.Close()
47 return nil, err
48 }
49 return &LockedFile{f}, err
50 }
51
View as plain text