Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sudo apt-get install libudev-dev
- #include <stdio.h>
- #include <unistd.h>
- #include <libudev.h>
- int main()
- {
- struct udev *udev;
- struct udev_device *dev;
- struct udev_monitor *mon;
- int fd;
- int status;
- /* create udev object */
- udev = udev_new();
- if (!udev) {
- fprintf(stderr, "Can't create udevn");
- return 1;
- }
- //группы сообщений
- //(1)kernel - посылает событие к udevd в момент подключения устройства для его инициализации
- //(2)udev - посылает событие в userspace программам, используемым libudev
- mon = udev_monitor_new_from_netlink(udev, "udev");
- //Можно также добавлять подсистемы pci, usb, scsi, scsi_host, scsi_generic
- //Типы устройств usb_device, usb_interface, scsi_host, scsi_device, disk, partition
- udev_monitor_filter_add_match_subsystem_devtype(mon, "block", "disk"); //флешки
- udev_monitor_enable_receiving(mon);
- fd = udev_monitor_get_fd(mon);
- printf("Start...n");
- fflush(stdout);
- while (1) {
- fd_set fds;
- struct timeval tv;
- int ret;
- FD_ZERO(&fds);
- FD_SET(fd, &fds);
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- ret = select(fd+1, &fds, NULL, NULL, &tv);
- if (ret > 0 && FD_ISSET(fd, &fds)) {
- dev = udev_monitor_receive_device(mon);
- if (dev) {
- printf("I: ACTION=%sn", udev_device_get_action(dev));
- printf("I: DEVNAME=%sn", udev_device_get_sysname(dev));
- printf("I: DEVPATH=%sn", udev_device_get_devpath(dev));
- printf("I: MACADDR=%sn", udev_device_get_sysattr_value(dev, "address"));
- printf("---n");
- fflush(stdout);
- /* free dev */
- udev_device_unref(dev);
- }
- }
- /* 500 milliseconds */
- usleep(500*1000);
- }
- /* free udev */
- udev_unref(udev);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement