go的shm 的SHMCTL调用的参数IPC_RMID

Hello,我的一个go 程序用到 共享内存 IPC通信 发现go的syscall中 shm有封装,SHMGET,SHMAT, SHMDT,SHMCTL ,但SHMCTL 调用,参数不知到怎么传入

这个函数 是创建 共享内测,并加载到程序空间,是没问题的,

func createShm(size int) (addr uintptr) {
    flag := 0600
    shmid, _, errno := syscall.RawSyscall(syscall.SYS_SHMGET, 0, uintptr(size), uintptr(flag))
    log("SHMGET ", shmid, errno)

    addr, _, errno := syscall.RawSyscall(syscall.SYS_SHMAT, shmid, 0, 0)
    mm := (*byte)(unsafe.Pointer(addr))
    log("memory ", mm)
    log("SHMAT ", shmid, errno, addr)
    return
}

这个SHMCTL参数怎么写啊,linux中有IPC_RMID,但是go中找不到这个常量,难道要用IPC_RMID对应的数字填进去吗?

func destroyShm(shmid uintptr) {
    ret, _, errno := syscall.RawSyscall(syscall.SYS_SHMCTL,  ??, 0, 0)
    log("SHMDT ", errno, *(*int)(unsafe.Pointer(ret)))
}

共 1 个回复


xinyu391

没人回复啊?

# 0