[Go] Go语言的共享内存读写实验 →→→→→进入此内容的聊天室

来自 , 2020-04-20, 写在 Go, 查看 128 次.
URL http://www.code666.cn/view/b367e525
  1.  
  2. package main
  3.  
  4. /*
  5. #cgo linux LDFLAGS: -lrt
  6.  
  7. #include <fcntl.h>
  8. #include <unistd.h>
  9. #include <sys/mman.h>
  10.  
  11. #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
  12.  
  13. int my_shm_new(char *name) {
  14.     shm_unlink(name);
  15.     return shm_open(name, O_RDWR|O_CREAT|O_EXCL, FILE_MODE);
  16. }
  17. */
  18. import "C"
  19. import (
  20.     "fmt"
  21.     "unsafe"
  22. )
  23.  
  24. const SHM_NAME = "my_shm"
  25. const SHM_SIZE = 4 * 1000 * 1000 * 1000
  26.  
  27. type MyData struct {
  28.     Col1 int
  29.     Col2 int
  30.     Col3 int
  31. }
  32.  
  33. func main() {
  34.     fd, err := C.my_shm_new(C.CString(SHM_NAME))
  35.     if err != nil {
  36.         fmt.Println(err)
  37.         return
  38.     }
  39.  
  40.     C.ftruncate(fd, SHM_SIZE)
  41.  
  42.     ptr, err := C.mmap(nil, SHM_SIZE, C.PROT_READ|C.PROT_WRITE, C.MAP_SHARED, fd, 0)
  43.     if err != nil {
  44.         fmt.Println(err)
  45.         return
  46.     }
  47.     C.close(fd)
  48.  
  49.     data := (*MyData)(unsafe.Pointer(ptr))
  50.  
  51.     data.Col1 = 100
  52.     data.Col2 = 876
  53.     data.Col3 = 8021
  54. }
  55.  
  56.  
  57. //go/4423

回复 "Go语言的共享内存读写实验"

这儿你可以回复上面这条便签

captcha