LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // +build darwin dragonfly freebsd netbsd openbsd | 5 // +build darwin dragonfly freebsd netbsd openbsd solaris |
6 | 6 |
7 package os | 7 package os |
8 | 8 |
9 import "syscall" | 9 import "syscall" |
10 | 10 |
11 // Pipe returns a connected pair of Files; reads from r return bytes written to
w. | 11 // Pipe returns a connected pair of Files; reads from r return bytes written to
w. |
12 // It returns the files and an error, if any. | 12 // It returns the files and an error, if any. |
13 func Pipe() (r *File, w *File, err error) { | 13 func Pipe() (r *File, w *File, err error) { |
14 var p [2]int | 14 var p [2]int |
15 | 15 |
16 // See ../syscall/exec.go for description of lock. | 16 // See ../syscall/exec.go for description of lock. |
17 syscall.ForkLock.RLock() | 17 syscall.ForkLock.RLock() |
18 e := syscall.Pipe(p[0:]) | 18 e := syscall.Pipe(p[0:]) |
19 if e != nil { | 19 if e != nil { |
20 syscall.ForkLock.RUnlock() | 20 syscall.ForkLock.RUnlock() |
21 return nil, nil, NewSyscallError("pipe", e) | 21 return nil, nil, NewSyscallError("pipe", e) |
22 } | 22 } |
23 syscall.CloseOnExec(p[0]) | 23 syscall.CloseOnExec(p[0]) |
24 syscall.CloseOnExec(p[1]) | 24 syscall.CloseOnExec(p[1]) |
25 syscall.ForkLock.RUnlock() | 25 syscall.ForkLock.RUnlock() |
26 | 26 |
27 return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil | 27 return NewFile(uintptr(p[0]), "|0"), NewFile(uintptr(p[1]), "|1"), nil |
28 } | 28 } |
LEFT | RIGHT |