input_linux.go 569 B

123456789101112131415161718192021222324252627282930313233
  1. package door
  2. import (
  3. "log"
  4. "syscall"
  5. )
  6. func Reader(handle int, readerChannel *chan byte) {
  7. // I don't need the select anymore. Let the read block.
  8. defer func() {
  9. if err := recover(); err != nil {
  10. log.Printf("Reader: %#v\n", err)
  11. }
  12. }()
  13. buffer := make([]byte, 1)
  14. for {
  15. read, err := syscall.Read(handle, buffer)
  16. if err != nil {
  17. log.Printf("Reader ERR: %#v\n", err)
  18. close(*readerChannel)
  19. break
  20. }
  21. if read == 1 {
  22. *readerChannel <- buffer[0]
  23. } else {
  24. log.Printf("READ FAILED %d\n", read)
  25. close(*readerChannel)
  26. break
  27. }
  28. }
  29. }