golang 文件锁

func TryLockFile(filePath string) (bool, *os.File) {
    file, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0644)
    if err != nil {
        return false, nil
    }

    err = syscall.Flock(int(file.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
    if err != nil {
        file.Close()
        return false, nil
    }
    log.Debug("TryLockFile: %s", filePath)
    return true, file
}

func UnlockFile(file *os.File) error {
    err := syscall.Flock(int(file.Fd()), syscall.LOCK_UN)
    if err != nil {
        return fmt.Errorf("error unlocking file: %w", err)
    }

    err = file.Close()
    if err != nil {
        return fmt.Errorf("error closing file: %w", err)
    }
    log.Debug("UnlockFile: %s", file.Name())
    return nil
}

 

posted on 2025-05-28 06:35  running-fly  阅读(17)  评论(0)    收藏  举报

导航