packages feed

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