From 43a3608d4ec416f8e2e45dac96d487a1ab84983b Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Fri, 22 Jan 2016 19:12:59 +0900 Subject: PIPE_BUF --- sandbox-go/src/parent.go | 10 ++++++---- 1 file 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} -- cgit v1.2.3