github.com/phobos182/packer@v0.2.3-0.20130819023704-c84d2aeffc68/builder/amazon/chroot/lockfile_unix.go (about) 1 // +build !windows 2 3 package chroot 4 5 import ( 6 "errors" 7 "os" 8 "syscall" 9 ) 10 11 // See: http://linux.die.net/include/sys/file.h 12 const LOCK_EX = 2 13 const LOCK_NB = 4 14 const LOCK_UN = 8 15 16 func lockFile(f *os.File) error { 17 err := syscall.Flock(int(f.Fd()), LOCK_EX|LOCK_NB) 18 if err != nil { 19 errno, ok := err.(syscall.Errno) 20 if ok && errno == syscall.EWOULDBLOCK { 21 return errors.New("file already locked") 22 } 23 24 return err 25 } 26 27 return nil 28 } 29 30 func unlockFile(f *os.File) error { 31 return syscall.Flock(int(f.Fd()), LOCK_UN) 32 }