Skip to content
/ shm Public

Package shm provides a way to use System V shared memory.

License

Notifications You must be signed in to change notification settings

hslam/shm

Repository files navigation

shm

PkgGoDev Build Status Go Report Card LICENSE

Package shm provides a way to use System V shared memory.

Get started

Install

go get github.com/hslam/shm

Import

import "github.com/hslam/shm"

Usage

SHM GET Example

Writer

package main

import (
	"fmt"
	"github.com/hslam/ftok"
	"github.com/hslam/shm"
	"time"
)

func main() {
	key, err := ftok.Ftok("/tmp", 0x22)
	if err != nil {
		panic(err)
	}
	shmid, data, err := shm.GetAttach(key, 128, shm.IPC_CREAT|0600)
	if err != nil {
		panic(err)
	}
	defer shm.Remove(shmid)
	defer shm.Detach(data)
	context := []byte("Hello World")
	copy(data, context)
	fmt.Println(string(data[:11]))
	time.Sleep(time.Second * 10)
}

Reader

package main

import (
	"fmt"
	"github.com/hslam/ftok"
	"github.com/hslam/shm"
)

func main() {
	key, err := ftok.Ftok("/tmp", 0x22)
	if err != nil {
		panic(err)
	}
	_, data, err := shm.GetAttach(key, 128, 0600)
	if err != nil {
		panic(err)
	}
	defer shm.Detach(data)
	fmt.Println(string(data[:11]))
}

Output

Hello World

SHM OPEN Example

Writer

package main

import (
	"fmt"
	"github.com/hslam/mmap"
	"github.com/hslam/shm"
	"time"
)

func main() {
	name := "shared"
	fd, err := shm.Open(name, shm.O_RDWR|shm.O_CREATE, 0600)
	if err != nil {
		panic(err)
	}
	defer shm.Unlink(name)
	defer shm.Close(fd)
	length := 128
	shm.Ftruncate(fd, int64(length))
	data, err := mmap.Open(fd, 0, length, mmap.READ|mmap.WRITE)
	if err != nil {
		panic(err)
	}
	defer mmap.Munmap(data)
	context := []byte("Hello World")
	copy(data, context)
	fmt.Println(string(data[:11]))
	time.Sleep(time.Second * 10)
}

Reader

package main

import (
	"fmt"
	"github.com/hslam/mmap"
	"github.com/hslam/shm"
)

func main() {
	name := "shared"
	fd, err := shm.Open(name, shm.O_RDONLY, 0600)
	if err != nil {
		panic(err)
	}
	defer shm.Close(fd)
	data, err := mmap.Open(fd, 0, 128, mmap.READ)
	if err != nil {
		panic(err)
	}
	defer mmap.Munmap(data)
	fmt.Println(string(data[:11]))
}

Output

Hello World

License

This package is licensed under a MIT license (Copyright (c) 2020 Meng Huang)

Author

shm was written by Meng Huang.