Go to file
hslam 9d0f21e8bd rename IPC_CREATE to IPC_CREAT 2020-11-27 13:11:57 +08:00
.gitignore Initial commit 2020-11-26 19:32:43 +08:00
.travis.yml add .travis.yml 2020-11-26 20:22:54 +08:00
LICENSE update LICENSE 2020-11-26 19:35:19 +08:00
README.md rename IPC_CREATE to IPC_CREAT 2020-11-27 13:11:57 +08:00
shm.go support windows shm 2020-11-27 02:01:38 +08:00
shm_bsd.go fix linux bug 2020-11-26 22:51:56 +08:00
shm_freebsd.go fix linux bug 2020-11-26 22:51:56 +08:00
shm_linux.go fix linux bug 2020-11-26 22:51:56 +08:00
shm_unix.go rename IPC_CREATE to IPC_CREAT 2020-11-27 13:11:57 +08:00
shm_unix_test.go rename IPC_CREATE to IPC_CREAT 2020-11-27 13:11:57 +08:00
shm_windows.go support windows shm 2020-11-27 02:01:38 +08:00
shm_windows_test.go support windows shm 2020-11-27 02:01:38 +08:00

README.md

shm

PkgGoDev Build Status Go Report Card LICENSE

Package shm provides a way to use shared memory.

Get started

Install

go get github.com/hslam/shm

Import

import "github.com/hslam/shm"

Usage

SHM GET Example

package main

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

func main() {
	done := make(chan struct{})
	go func() {
		writer()
		close(done)
	}()
	time.Sleep(time.Second)
	reader()
	<-done
}

func writer() {
	shmid, data, err := shm.GetAt(2, 128, shm.IPC_CREAT|0600)
	if err != nil {
		log.Fatal(err)
	}
	defer shm.Remove(shmid)
	defer shm.Dt(data)
	copy(data, []byte("Hello World"))
	time.Sleep(time.Second * 2)
}

func reader() {
	_, data, err := shm.GetAt(2, 128, 0600)
	if err != nil {
		log.Fatal(err)
	}
	defer shm.Dt(data)
	fmt.Println(string(data[:11]))
}

Output

Hello World

SHM OPEN Example

package main

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

func main() {
	done := make(chan struct{})
	go func() {
		writer()
		close(done)
	}()
	time.Sleep(time.Second)
	reader()
	<-done
}

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

func reader() {
	fd, err := shm.Open("shared", 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.