1// Copyright 2015 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 5package main 6 7import "C" 8 9import ( 10 "os" 11 "os/signal" 12 "syscall" 13 "time" 14) 15 16// The channel used to read SIGIO signals. 17var sigioChan chan os.Signal 18 19// CatchSIGIO starts catching SIGIO signals. 20// 21//export CatchSIGIO 22func CatchSIGIO() { 23 sigioChan = make(chan os.Signal, 1) 24 signal.Notify(sigioChan, syscall.SIGIO) 25} 26 27// ResetSIGIO stops catching SIGIO signals. 28// 29//export ResetSIGIO 30func ResetSIGIO() { 31 signal.Reset(syscall.SIGIO) 32} 33 34// SawSIGIO reports whether we saw a SIGIO. 35// 36//export SawSIGIO 37func SawSIGIO() C.int { 38 select { 39 case <-sigioChan: 40 return 1 41 case <-time.After(5 * time.Second): 42 return 0 43 } 44} 45 46// ProvokeSIGPIPE provokes a kernel-initiated SIGPIPE. 47// 48//export ProvokeSIGPIPE 49func ProvokeSIGPIPE() { 50 r, w, err := os.Pipe() 51 if err != nil { 52 panic(err) 53 } 54 r.Close() 55 defer w.Close() 56 w.Write([]byte("some data")) 57} 58 59func main() { 60} 61