directio

package
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 7, 2023 License: MIT, MIT Imports: 4 Imported by: 0

README

DirectIO

This is library for the Go language to enable use of Direct IO under all supported OSes of Go (except openbsd and plan9).

Direct IO does IO to and from disk without buffering data in the OS. It is useful when you are reading or writing lots of data you don't want to fill the OS cache up with.

See here for package docs

http://godoc.org/github.com/ncw/directio

Install

Directio is a Go library and installs in the usual way

go get github.com/ncw/directio

Usage

Instead of using os.OpenFile use directio.OpenFile

in, err := directio.OpenFile(file, os.O_RDONLY, 0666)

And when reading or writing blocks, make sure you do them in chunks of directio.BlockSize using memory allocated by directio.AlignedBlock

block := directio.AlignedBlock(directio.BlockSize)
    _, err := io.ReadFull(in, block)

License

This is free software under the terms of MIT the license (check the COPYING file included in this package).

Contact and support

The project website is at:

There you can file bug reports, ask for help or contribute patches.

Authors

Contributors

Documentation

Overview

This is library for the Go language to enable use of Direct IO under all supported OSes of Go.

Direct IO does IO to and from disk without buffering data in the OS. It is useful when you are reading or writing lots of data you don't want to fill the OS cache up with.

Instead of using os.OpenFile use directio.OpenFile

in, err := directio.OpenFile(file, os.O_RDONLY, 0666)

And when reading or writing blocks, make sure you do them in chunks of directio.BlockSize using memory allocated by directio.AlignedBlock

	block := directio.AlignedBlock(BlockSize)
        _, err := io.ReadFull(in, block)

Index

Constants

View Source
const (
	// Size to align the buffer to
	AlignSize = 4096

	// Minimum block size
	BlockSize = 4096
)

Variables

This section is empty.

Functions

func AlignedBlock

func AlignedBlock(BlockSize int) []byte

AlignedBlock returns []byte of size BlockSize aligned to a multiple of AlignSize in memory (must be power of two)

func IsAligned

func IsAligned(block []byte) bool

IsAligned checks wether passed byte slice is aligned

func OpenFile

func OpenFile(name string, flag int, perm os.FileMode) (file *os.File, err error)

OpenFile is a modified version of os.OpenFile which sets O_DIRECT

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL