github.com/nvi-inc/svipc@v0.1.0/syscall_linux_386.go (about) 1 package svipc 2 3 import ( 4 "unsafe" 5 6 "golang.org/x/sys/unix" 7 ) 8 9 const ( 10 IPCOP_SEMOP = 1 11 IPCOP_SEMGET = 2 12 IPCOP_SEMCTL = 3 13 IPCOP_SEMTIMEDOP = 4 14 IPCOP_MSGSND = 11 15 IPCOP_MSGRCV = 12 16 IPCOP_MSGGET = 13 17 IPCOP_MSGCTL = 14 18 IPCOP_SHMAT = 21 19 IPCOP_SHMDT = 22 20 IPCOP_SHMGET = 23 21 IPCOP_SHMCTL = 24 22 23 IPC_64 = 0x0100 24 ) 25 26 //SEM 27 28 func Semget(key IpcKey, nsems int, flags int) (id int, err error) { 29 ret, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SEMGET, uintptr(key), uintptr(nsems), uintptr(flags), 0, 0) 30 id = int(ret) 31 if errno != 0 { 32 err = errno 33 } 34 return 35 } 36 37 func Semop(id int, buf unsafe.Pointer, n int) (err error) { 38 _, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SEMOP, uintptr(id), uintptr(n), 0, uintptr(buf), 0) 39 if errno != 0 { 40 err = errno 41 } 42 return 43 } 44 45 func Semctl(id int, num int, cmd int) (n int, err error) { 46 var buf uintptr //currently unused 47 ret, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SEMCTL, uintptr(id), uintptr(num), uintptr(cmd|IPC_64), uintptr(unsafe.Pointer(&buf)), 0) 48 n = int(ret) 49 if errno != 0 { 50 err = errno 51 } 52 return 53 } 54 55 //SHM 56 57 func Shmget(key IpcKey, size uintptr, flag int) (shmid uintptr, err error) { 58 shmid, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SHMGET, uintptr(key), size, uintptr(flag), 0, 0) 59 if errno != 0 { 60 err = errno 61 } 62 return 63 } 64 65 func Shmat(id uintptr, addr uintptr, flag int) (ptr unsafe.Pointer, err error) { 66 _, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SHMAT, id, uintptr(flag), uintptr(unsafe.Pointer(&addr)), addr, 0) 67 if errno != 0 { 68 err = errno 69 } 70 ptr = unsafe.Pointer(addr) 71 return 72 } 73 74 func Shmctl(id uintptr, cmd int, shmid *ShmId) (err error) { 75 ptr := uintptr(unsafe.Pointer(shmid)) 76 _, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SHMCTL, id, uintptr(cmd|IPC_64), 0, ptr, 0) 77 if errno != 0 { 78 err = errno 79 } 80 return 81 } 82 83 func Shmdt(addr unsafe.Pointer) (err error) { 84 _, _, errno := unix.Syscall6(unix.SYS_IPC, IPCOP_SHMDT, 0, 0, 0, uintptr(addr), 0) 85 if errno != 0 { 86 err = errno 87 } 88 return 89 }