Skip to content

Instantly share code, notes, and snippets.

@iamralch
Last active August 29, 2015 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iamralch/a31030477b32ff00bf1c to your computer and use it in GitHub Desktop.
Save iamralch/a31030477b32ff00bf1c to your computer and use it in GitHub Desktop.
package main
import (
"os"
"syscall"
"time"
)
func pipe(path string) (*os.File, *os.File, error) {
syscall.ForkLock.RLock()
defer syscall.ForkLock.RUnlock()
if _, err := os.Stat(path); err != nil {
if !os.IsNotExist(err) {
return nil, nil, err
} else {
if err := syscall.Mkfifo(path, 0666); err != nil {
return nil, nil, err
}
}
}
reader, err := os.OpenFile(path, syscall.O_NONBLOCK|os.O_RDONLY, 0666)
if err != nil {
return nil, nil, err
}
writer, err := os.OpenFile(path, syscall.O_NONBLOCK|os.O_WRONLY, 0666)
if err != nil {
return nil, nil, err
}
syscall.CloseOnExec(int(reader.Fd()))
syscall.CloseOnExec(int(writer.Fd()))
return reader, writer, nil
}
func main() {
println("pipe")
r, w, err := pipe("/tmp/fifo_wsd")
if err != nil {
panic(err)
}
defer r.Close()
defer w.Close()
println("Sleeping")
time.Sleep(60 * time.Second)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment