udev-0.1.1.0: examples/monitor.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Control.Monad (forever)
import Control.Concurrent (threadWaitRead)
import System.UDev.Context
import System.UDev.Device
import System.UDev.Monitor
dumpDeviceInfo :: Device -> IO ()
dumpDeviceInfo dev = do
print $ getSubsystem dev
print $ getDevtype dev
print $ getSyspath dev
print $ getSysname dev
print $ getSysnum dev
print $ getDevnode dev
print $ getAction dev
putStrLn $ "device number: " ++ show (getDevnum dev)
main :: IO ()
main = withUDev $ \ udev -> do
setLogPriority udev LogDebug
setLogger udev defaultLogger
monitor <- newFromNetlink udev UDevId
enableReceiving monitor
fd <- getFd monitor
forever $ do
threadWaitRead fd
dev <- receiveDevice monitor
dumpDeviceInfo dev