// +build !windows

package dirlock

import (
    "fmt"
    "os"
    "syscall"
)

type DirLock struct {
    dir string
    f   *os.File
}

func New(dir string) *DirLock {
    return &DirLock{
        dir: dir,
    }
}

func (l *DirLock) Lock() error {
    f, err := os.Open(l.dir)
    if err != nil {
        return err
    }
    l.f = f
    err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
    if err != nil {
        return fmt.Errorf("cannot flock directory %s - %s", l.dir, err)
    }
    return nil
}

func (l *DirLock) Unlock() error {
    defer l.f.Close()
    return syscall.Flock(int(l.f.Fd()), syscall.LOCK_UN)
}

dirlock.go的更多相关文章

  1. dirlock_windows.go

    package dirlock type DirLock struct {     dir string } func New(dir string) *DirLock {     return &a ...

  2. nsqd.go

    }

  3. NSQ源码剖析——主要结构方法和消息生产消费过程

    目录 1 概述 2 主要结构体及方法 2.1 NSQD 2.2 tcpServer 2.3 protocolV2 2.4 clientV2 2.5 Topic 2.6 channel 3 启动过程 4 ...

随机推荐

  1. Git学习备忘

    本文参考廖雪峰写的精彩的git学习文档,大家可以直接去官网看原版,我这里只是便于自己记录梳理 原版地址:http://www.liaoxuefeng.com/wiki/0013739516305929 ...

  2. .ancestors *效果

    <!DOCTYPE html> <html> <head> <style> .ancestors * {  display: block; border ...

  3. SpringBoot功能持续更新

    [定时任务] 1.启动总开关 @EnableScheduling加在@SpringBootApplication注解的start入口处,表示启动总开关 @SpringBootApplication @ ...

  4. CSS position 笔记+实验

    目录: 1.static 2.relative 3.absolute 4.fixed 5.实验:static, relative, absolute中,父元素-子元素高度关系 6.z-index 7. ...

  5. postgresql to_char 问题

    select create_time from  xxx; select to_char(create_time,'yyyy-MM-dd HH24:mm:ss') as  create_time fr ...

  6. Ocelot中文文档-架构图

    Ocelot 针对的是,使用.net运行微服务和面向服务架构,并且需要一个统一的入口来访问他们系统的人群. 特别是,我想要与IdentityServer和令牌轻松集成. Ocelot是一组有特定顺序的 ...

  7. Python的编码风格

    1.采用四个空格作为缩进 2.一行代码不要超多79个字符 3.使用空行分割类,函数,以及大块代码 4.注释独占一行 5.使用文档字符串 6.操作符的两侧,逗号后面都要加空格(但是括号的里侧是不加的) ...

  8. Spring4托管Hibernate5并利用HibernateTemplate进行数据库操作

    时隔半年,再次发布配置类的相关Blog,因为左手受伤原因先做一个简述. 首先利用idea创建一个Spring+SpringMVC+Hibernate项目,注意的是因为我们要完全放弃Hibernate以 ...

  9. 关于引用(python中的伪指针)的理解

    # 总结:个人理解,引用不可变的的变量时,随着改变会指向新的地址 # 引用可变的变量时,位置不会随着变量改变而改变 a = 1 b = a print(b) a = 2 # 指向了新的内存地址 pri ...

  10. 用C++实现一个不能被继承的类

    #include<iostream> using namespace std; class Gradpa { friend class Parent;//声明public或者private ...