aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-01-22 19:12:59 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-01-22 19:12:59 +0900
commit43a3608d4ec416f8e2e45dac96d487a1ab84983b (patch)
treed3eb435284a5f6257b72985759eefa2d045cb724
parent77d8859c14239a75df182c5d933ff6255132e94d (diff)
downloadpoe-43a3608d4ec416f8e2e45dac96d487a1ab84983b.tar.gz
PIPE_BUF
-rw-r--r--sandbox-go/src/parent.go10
1 files changed, 6 insertions, 4 deletions
diff --git a/sandbox-go/src/parent.go b/sandbox-go/src/parent.go
index bd60a21..35a2df2 100644
--- a/sandbox-go/src/parent.go
+++ b/sandbox-go/src/parent.go
@@ -3,6 +3,7 @@ package main
import (
"bytes"
"encoding/binary"
+ "unsafe"
"fmt"
"os"
"os/signal"
@@ -78,14 +79,15 @@ func doParent(mpid int, stdin_fd, stdout_fd, stderr_fd [2]int) resultPack {
poePanic(err, "epoll_wait failed")
}
- var buf [1024]byte // TODO: pipe size?
+ var buf [65536]byte // TODO: how to get PIPE_BUF?
for ev := 0; ev < en; ev++ {
for {
- n, err := syscall.Read(int(events[ev].Fd), buf[:])
- if err != nil {
+ r1, _, e1 := syscall.Syscall(syscall.SYS_READ, uintptr(events[ev].Fd), uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)))
+ if e1 != 0 {
break
}
- if n > 0 {
+ n := int(r1)
+ if r1 > 0 {
nbuf := make([]byte, n)
copy(nbuf, buf[:n])
out_chan <- childOutput{int(events[ev].Pad), n, nbuf}