shm_r.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import(
  3. "fmt"
  4. "time"
  5. "unsafe"
  6. //"strings"
  7. "github.com/hidez8891/shm"
  8. )
  9. const SHM_NAME = "my_shm"
  10. const SHM_SIZE = 4 * 1000 * 1000
  11. type MyData struct {
  12. ss string
  13. ii int
  14. }
  15. //https://stackoverflow.com/questions/16330490/in-go-how-can-i-convert-a-struct-to-a-byte-array
  16. func main() {
  17. /*w, err := shm.Create("aaa", 64)
  18. if err != nil {
  19. fmt.Printf("fail: create shared memroy %v", err)
  20. }
  21. data := []byte( strings.Repeat("a", 63) )
  22. n, err := w.WriteAt(data, 0)
  23. if err != nil {
  24. fmt.Printf("fail: write shared memroy %v", err)
  25. }
  26. fmt.Println("wn==>%d", n)*/
  27. r, err := shm.Open(SHM_NAME, SHM_SIZE)
  28. if err != nil {
  29. fmt.Printf("fail: open shared memroy %v", err)
  30. }
  31. const sz = int( unsafe.Sizeof( MyData{} ) )
  32. buf := make([]byte, sz)
  33. n, err := r.ReadAt(buf, 0)
  34. if err != nil {
  35. fmt.Printf("fail: read shared memroy %v", err)
  36. }
  37. data := *(**MyData)(unsafe.Pointer(&buf))
  38. fmt.Printf("n==> %d, ss==>%s, ii==>%d \n", n, data.ss, data.ii)
  39. r.Close()
  40. time.Sleep(time.Duration(30)*time.Second)
  41. //w.Close()
  42. }