Last active
August 14, 2018 07:12
-
-
Save wrouesnel/530cf604484fddc02984b793ed10638d to your computer and use it in GitHub Desktop.
Interrogating udev with golang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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