library: os.Pipe

This commit is contained in:
xushiwei
2024-07-28 23:09:21 +08:00
parent bae40c82b9
commit a9ece9e49d
4 changed files with 66 additions and 3 deletions

View File

@@ -274,9 +274,6 @@ func Mkdir(name string, perm FileMode) error {
// func MkdirAll(path string, perm FileMode) error // func MkdirAll(path string, perm FileMode) error
// func MkdirTemp(dir, pattern string) (string, error) // func MkdirTemp(dir, pattern string) (string, error)
// func NewSyscallError(syscall string, err error) error // func NewSyscallError(syscall string, err error) error
func Pipe() (r *File, w *File, err error) {
panic("todo: os.Pipe")
}
// func ReadFile(name string) ([]byte, error) // func ReadFile(name string) ([]byte, error)

View File

@@ -0,0 +1,22 @@
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build dragonfly || freebsd || linux || netbsd || openbsd || solaris
package os
import "syscall"
// Pipe returns a connected pair of Files; reads from r return bytes written to w.
// It returns the files and an error, if any.
func Pipe() (r *File, w *File, err error) {
var p [2]int
e := syscall.Pipe2(p[0:], syscall.O_CLOEXEC)
if e != nil {
return nil, nil, NewSyscallError("pipe2", e)
}
return newFile(p[0], "|0", kindPipe), newFile(p[1], "|1", kindPipe), nil
}

View File

@@ -0,0 +1,28 @@
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build aix || darwin
package os
import "syscall"
// Pipe returns a connected pair of Files; reads from r return bytes written to w.
// It returns the files and an error, if any.
func Pipe() (r *File, w *File, err error) {
var p [2]int
// See ../syscall/exec.go for description of lock.
syscall.ForkLock.RLock()
e := syscall.Pipe(p[0:])
if e != nil {
syscall.ForkLock.RUnlock()
return nil, nil, NewSyscallError("pipe", e)
}
syscall.CloseOnExec(p[0])
syscall.CloseOnExec(p[1])
syscall.ForkLock.RUnlock()
return newFile(p[0], "|0", kindPipe), newFile(p[1], "|1", kindPipe), nil
}

View File

@@ -0,0 +1,16 @@
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build wasm
package os
import "syscall"
// Pipe returns a connected pair of Files; reads from r return bytes written to w.
// It returns the files and an error, if any.
func Pipe() (r *File, w *File, err error) {
// Neither GOOS=js nor GOOS=wasip1 have pipes.
return nil, nil, NewSyscallError("pipe", syscall.ENOSYS)
}