mirror of https://github.com/hslam/ipc.git
update msg methods
This commit is contained in:
parent
69c6385272
commit
3a5168acb9
|
@ -79,14 +79,14 @@ func main() {
|
|||
return
|
||||
}
|
||||
n := binary.PutUvarint(buf, uint64(len(text)))
|
||||
if err := ipc.Msgsnd(msgid, 1, buf[:n], 0600); err != nil {
|
||||
if err := ipc.Msgsend(msgid, 1, buf[:n], 0600); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fmt.Println("Recv:")
|
||||
for {
|
||||
m, err := ipc.Msgrcv(msgid, 1, 0600)
|
||||
m, err := ipc.Msgreceive(msgid, 1, 0600)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
27
ipc_test.go
27
ipc_test.go
|
@ -41,7 +41,7 @@ func TestIPC(t *testing.T) {
|
|||
if _, err := Semv(semid, semnum, SEM_UNDO); err != nil {
|
||||
return
|
||||
}
|
||||
if err := Msgsnd(msgid, 1, []byte{byte(len(context))}, 0600); err != nil {
|
||||
if err := Msgsend(msgid, 1, []byte{byte(len(context))}, 0600); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ func TestIPC(t *testing.T) {
|
|||
msgid, _ := Msgget(key, 0600)
|
||||
defer Msgrm(msgid)
|
||||
|
||||
m, err := Msgrcv(msgid, 1, 0600)
|
||||
m, err := Msgreceive(msgid, 1, 0600)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ func TestMore(t *testing.T) {
|
|||
context := strings.Repeat("1", 64)
|
||||
done := make(chan struct{})
|
||||
semnum := 0
|
||||
msgType := uint(1)
|
||||
go func() {
|
||||
key, _ := Ftok("/tmp", 0x22)
|
||||
semid, err := Semget(key, 1, 0600)
|
||||
|
@ -123,10 +124,15 @@ func TestMore(t *testing.T) {
|
|||
if _, err := Semv(semid, semnum, SEM_UNDO); err != nil {
|
||||
return
|
||||
}
|
||||
if err := Msgsnd(msgid, 1, []byte{byte(len(context))}, 0600); err != nil {
|
||||
st := struct {
|
||||
Type uint
|
||||
Text [8192]byte
|
||||
}{}
|
||||
st.Type = msgType
|
||||
n := copy(st.Text[:], []byte{byte(len(context))})
|
||||
if err := Msgsnd(msgid, uintptr(unsafe.Pointer(&st)), n, 0600); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
close(done)
|
||||
}()
|
||||
|
@ -158,12 +164,19 @@ func TestMore(t *testing.T) {
|
|||
defer Shmdt(shmaddr)
|
||||
msgid, _ := Msgget(key, 0600)
|
||||
defer Msgrm(msgid)
|
||||
|
||||
m, err := Msgrcv(msgid, 1, 0600)
|
||||
st := struct {
|
||||
Type uint
|
||||
Text [8192]byte
|
||||
}{}
|
||||
st.Type = msgType
|
||||
sz, err := Msgrcv(msgid, uintptr(unsafe.Pointer(&st)), 8192, msgType, 0600)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
length := int(m[0])
|
||||
if sz < 1 {
|
||||
t.Error()
|
||||
}
|
||||
length := int(st.Text[0])
|
||||
if ret, err := Semgetvalue(semid, semnum); err != nil {
|
||||
t.Error(err)
|
||||
} else if ret < 1 {
|
||||
|
|
18
msg.go
18
msg.go
|
@ -13,13 +13,23 @@ func Msgget(key int, msgflg int) (int, error) {
|
|||
}
|
||||
|
||||
// Msgsnd calls the msgsnd system call.
|
||||
func Msgsnd(msgid int, msgType uint, msgText []byte, flags int) error {
|
||||
return msg.Snd(msgid, msgType, msgText, flags)
|
||||
func Msgsnd(msgid int, msgp uintptr, msgsz int, msgflg int) error {
|
||||
return msg.Snd(msgid, msgp, msgsz, msgflg)
|
||||
}
|
||||
|
||||
// Msgrcv calls the msgrcv system call.
|
||||
func Msgrcv(msgid int, msgType uint, flags int) ([]byte, error) {
|
||||
return msg.Rcv(msgid, msgType, flags)
|
||||
func Msgrcv(msgid int, msgp uintptr, msgsz int, msgtyp uint, msgflg int) (int, error) {
|
||||
return msg.Rcv(msgid, msgp, msgsz, msgtyp, msgflg)
|
||||
}
|
||||
|
||||
// Msgsend calls the msgsnd system call.
|
||||
func Msgsend(msgid int, msgType uint, msgText []byte, flags int) error {
|
||||
return msg.Send(msgid, msgType, msgText, flags)
|
||||
}
|
||||
|
||||
// Msgreceive calls the msgrcv system call.
|
||||
func Msgreceive(msgid int, msgType uint, flags int) ([]byte, error) {
|
||||
return msg.Receive(msgid, msgType, flags)
|
||||
}
|
||||
|
||||
// Msgrm removes the shm with the given id.
|
||||
|
|
Loading…
Reference in New Issue