...
Source file src/pkg/os/pipe_linux.go
1
2
3
4
5 package os
6
7 import "syscall"
8
9
10
11 func Pipe() (r *File, w *File, err error) {
12 var p [2]int
13
14 e := syscall.Pipe2(p[0:], syscall.O_CLOEXEC)
15
16
17 if e == syscall.ENOSYS {
18
19 syscall.ForkLock.RLock()
20 e = syscall.Pipe(p[0:])
21 if e != nil {
22 syscall.ForkLock.RUnlock()
23 return nil, nil, NewSyscallError("pipe", e)
24 }
25 syscall.CloseOnExec(p[0])
26 syscall.CloseOnExec(p[1])
27 syscall.ForkLock.RUnlock()
28 } else if e != nil {
29 return nil, nil, NewSyscallError("pipe2", e)
30 }
31
32 return newFile(uintptr(p[0]), "|0", kindPipe), newFile(uintptr(p[1]), "|1", kindPipe), nil
33 }
34
View as plain text