epoll-0.1: examples/Stdin.hs
module Main where
import System.Linux.Epoll
import System.Posix.IO
import System.IO
import Data.Maybe
import Text.Printf
eventTypes :: [EventType]
eventTypes = [inEvent, edgeTriggeredEvent, oneShotEvent]
callback :: Device -> Event a -> IO ()
callback d e = do
let et = eventType e
fd = eventFd e
setFdOption fd NonBlockingRead True
printf "event=%s, fd=%s\n" (show et) (show fd)
(s, c) <- fdRead fd 16
printf "read %s byte(s): %s\n" (show c) s
modify d eventTypes (eventDesc e)
main :: IO ()
main = do
let s = fromJust $ toSize 32
dev <- create s
add dev () eventTypes stdInput
defaultDispatchLoop (callback dev) dev