https://github.com/hslam/shm
Package shm provides a way to use System V shared memory.
https://github.com/hslam/shm
go golang ipc shared-memory shm shmget system-v unix
Last synced: 5 months ago
JSON representation
Package shm provides a way to use System V shared memory.
- Host: GitHub
- URL: https://github.com/hslam/shm
- Owner: hslam
- License: mit
- Created: 2020-11-26T11:32:42.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2021-01-16T19:00:30.000Z (over 4 years ago)
- Last Synced: 2025-03-30T11:32:45.425Z (6 months ago)
- Topics: go, golang, ipc, shared-memory, shm, shmget, system-v, unix
- Language: Go
- Homepage:
- Size: 22.5 KB
- Stars: 12
- Watchers: 1
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# shm
[](https://pkg.go.dev/github.com/hslam/shm)
[](https://github.com/hslam/shm/actions)
[](https://goreportcard.com/report/github.com/hslam/shm)
[](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 mainimport (
"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 mainimport (
"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 mainimport (
"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 mainimport (
"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.