来源:https://github.com/jsgilmore/shm
callback := syscall.NewCallback(func(r uintptr, size int) (ret uintptr) {
// 定义一个[]byte切片,用来存储C返回的字符串
t1 := time.Now() // get current time
data := make([]byte,size)
C.memcpy(unsafe.Pointer(&data[0]), unsafe.Pointer(r), C.size_t(size))
package shm
//#include <string.h>
import "C"
import "unsafe"
func memcpy(dest, src []byte) int {
n := len(src)
if len(dest) < len(src) {
n = len(dest)
}
if n == 0 {
return 0
}
C.memcpy(unsafe.Pointer(&dest[0]), unsafe.Pointer(&src[0]), C.size_t(n))
return n
}
func memmove(dest, src []byte) int {
n := len(src)
if len(dest) < len(src) {
n = len(dest)
}
if n == 0 {
return 0
}
C.memmove(unsafe.Pointer(&dest[0]), unsafe.Pointer(&src[0]), C.size_t(n))
return n
}