| | |
| | | "unsafe" |
| | | ) |
| | | |
| | | // lock free queue struct |
| | | // []byte struct |
| | | type ShmDataInfo struct { |
| | | Capacity uint32 |
| | | Cache []byte |
| | |
| | | |
| | | //WriteShmData data待写入的数据; shmId:共享内存id,只attach,不create |
| | | func WriteShmData(data []byte, shmId int) error { |
| | | shmdata,err := Attach(shmId) |
| | | shmData,err := Attach(shmId) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | sdi := shmData2Info(shmdata) |
| | | if len(data) <= len(shmdata) { |
| | | sdi := shmData2Info(shmData) |
| | | if len(data) <= len(shmData) { |
| | | sdi.Capacity = uint32(len(data)) |
| | | } else { |
| | | sdi.Capacity = uint32(len(shmdata)) |
| | | sdi.Capacity = uint32(len(shmData)) |
| | | } |
| | | |
| | | tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) |
| | |
| | | |
| | | //ReadShmData attach到shmId对应的共享内存,并读出数据[]byte |
| | | func ReadShmData(shmId int) ([]byte,error) { |
| | | shmdata,err := Attach(shmId) |
| | | shmData,err := Attach(shmId) |
| | | if err != nil { |
| | | return nil,err |
| | | } |
| | | |
| | | sdi := shmData2Info(shmdata) |
| | | sdi := shmData2Info(shmData) |
| | | tmpData := ptr2Slice(unsafe.Pointer(&sdi.Cache), int(sdi.Capacity)) |
| | | |
| | | return tmpData, nil |