hslam_shm/README.md

148 lines
2.6 KiB
Markdown

# shm
[![PkgGoDev](https://pkg.go.dev/badge/github.com/hslam/shm)](https://pkg.go.dev/github.com/hslam/shm)
[![Build Status](https://github.com/hslam/shm/workflows/build/badge.svg)](https://github.com/hslam/shm/actions)
[![Go Report Card](https://goreportcard.com/badge/github.com/hslam/shm)](https://goreportcard.com/report/github.com/hslam/shm)
[![LICENSE](https://img.shields.io/github/license/hslam/shm.svg?style=flat-square)](https://github.com/hslam/shm/blob/master/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**
```go
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**
```go
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**
```go
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**
```go
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.