// Copyright 2015 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. package main /* #include <signal.h> #include <pthread.h> // Raise SIGIO. static void CRaiseSIGIO(pthread_t* p) { pthread_kill(*p, SIGIO); } */ import "C" import ( "os" "os/signal" "sync/atomic" "syscall" ) var sigioCount int32 // Catch SIGIO. //export GoCatchSIGIO func GoCatchSIGIO() { c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGIO) go func() { for range c { atomic.AddInt32(&sigioCount, 1) } }() } // Raise SIGIO. //export GoRaiseSIGIO func GoRaiseSIGIO(p *C.pthread_t) { C.CRaiseSIGIO(p) } // Return the number of SIGIO signals seen. //export SIGIOCount func SIGIOCount() C.int { return C.int(atomic.LoadInt32(&sigioCount)) } func main() { }