Skip to content

Instantly share code, notes, and snippets.

@wrouesnel
Last active August 14, 2018 07:12
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wrouesnel/530cf604484fddc02984b793ed10638d to your computer and use it in GitHub Desktop.
Save wrouesnel/530cf604484fddc02984b793ed10638d to your computer and use it in GitHub Desktop.
Interrogating udev with golang
/* Go-udev binding toy application showing the two major things you'd generally want to do with it. */
/* Go-udev binding toy application */
package main
import (
"fmt"
"github.com/jochenvg/go-udev"
"github.com/jkeiser/iter"
"os/signal"
"os"
)
func printDeviceInfo(dev *udev.Device) {
fmt.Println("Action: ", dev.Action())
fmt.Println("Devtype:", dev.Devtype())
fmt.Println("Devnode:", dev.Devnode())
fmt.Println("Devnum:", dev.Devnum())
fmt.Println("Devpath:", dev.Devpath())
fmt.Println("Devlinks:", dev.Devlinks())
fmt.Println("Driver:", dev.Driver())
fmt.Println("Sysattrs:", dev.Sysattrs())
fmt.Println("Syspath:", dev.Syspath())
fmt.Println("Tags:", dev.Tags())
fmt.Println("Properties:", dev.Properties())
fmt.Println("Initialized:", dev.IsInitialized())
fmt.Println("---")
}
func main() {
fmt.Println("go-udev toy")
udevCtx := udev.Udev{}
fmt.Println("Enumerating existing devices...")
e := udevCtx.NewEnumerate()
ei, err := e.DeviceIterator()
if err != nil {
panic(err)
}
for {
val, err := ei.Next()
if err != nil {
if err == iter.FINISHED {
ei.Close()
break
}
}
dev := val.(*udev.Device)
printDeviceInfo(dev)
}
fmt.Println("Watching for new ones...")
mon := udevCtx.NewMonitorFromNetlink("udev")
sigCh := make(chan os.Signal, 1)
doneCh := make(chan struct{})
signal.Notify(sigCh, os.Interrupt)
go func() {
for _ = range sigCh {
close(doneCh)
return
}
}()
deviceChan, err := mon.DeviceChan(doneCh)
if err != nil {
panic(err)
}
for dev := range deviceChan {
printDeviceInfo(dev)
}
fmt.Println("Exited.")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment