Skip to content

Latest commit

 

History

History
85 lines (63 loc) · 1.76 KB

README.md

File metadata and controls

85 lines (63 loc) · 1.76 KB

go-file

Package file is a Go library to open files with file locking depending on the system.

Test GoDoc License: MIT

Install

go get github.com/mithrandie/go-file

Requirements

Go 1.17 or later (cf. Getting Started - The Go Programming Language)

Supported Systems

Currently, file locking on the following systems are supported.

darwin dragonfly freebsd linux netbsd openbsd solaris

Advisory Lock

windows

Mandatory Lock

android nacl plan9 zos

Not Supported

Example

package main

import (
	"bufio"
	"context"
	"fmt"
	"time"
	 
	"github.com/mithrandie/go-file/v2"
)

func main() {
	// Try to lock and open the file with shared lock
	fp, err := file.TryOpenToRead("/path/to/file")
	if err != nil {
		panic(err)
	}
	defer func() {
		if e := file.Close(fp); e != nil {
			println(e.Error())
		}
	}()

	s := bufio.NewScanner(fp)
	for s.Scan() {
		fmt.Println(s.Text())
	}

	// Open the file with shared lock.
	// If the file is already locked, tries to lock repeatedly until the conditions is met.
	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
	cfp, err := file.OpenToReadContext(ctx, 50*time.Millisecond, "/path/to/file2")
	if err != nil {
		panic(err)
	}
	defer func() {
		cancel()
		if e := file.Close(cfp); e != nil {
			println(e.Error())
		}
	}()

	cs := bufio.NewScanner(cfp)
	for cs.Scan() {
		fmt.Println(cs.Text())
	}
}