pipe_bsd.go 819 B

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