Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. sudo apt-get install libudev-dev
  2.  
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <libudev.h>
  6.  
  7. int main()
  8. {
  9. struct udev *udev;
  10. struct udev_device *dev;
  11. struct udev_monitor *mon;
  12. int fd;
  13. int status;
  14.  
  15. /* create udev object */
  16. udev = udev_new();
  17. if (!udev) {
  18. fprintf(stderr, "Can't create udevn");
  19. return 1;
  20. }
  21.  
  22. //группы сообщений
  23. //(1)kernel - посылает событие к udevd в момент подключения устройства для его инициализации
  24. //(2)udev - посылает событие в userspace программам, используемым libudev
  25. mon = udev_monitor_new_from_netlink(udev, "udev");
  26. //Можно также добавлять подсистемы pci, usb, scsi, scsi_host, scsi_generic
  27. //Типы устройств usb_device, usb_interface, scsi_host, scsi_device, disk, partition
  28. udev_monitor_filter_add_match_subsystem_devtype(mon, "block", "disk"); //флешки
  29. udev_monitor_enable_receiving(mon);
  30. fd = udev_monitor_get_fd(mon);
  31.  
  32. printf("Start...n");
  33. fflush(stdout);
  34. while (1) {
  35. fd_set fds;
  36. struct timeval tv;
  37. int ret;
  38.  
  39. FD_ZERO(&fds);
  40. FD_SET(fd, &fds);
  41. tv.tv_sec = 0;
  42. tv.tv_usec = 0;
  43.  
  44. ret = select(fd+1, &fds, NULL, NULL, &tv);
  45. if (ret > 0 && FD_ISSET(fd, &fds)) {
  46. dev = udev_monitor_receive_device(mon);
  47. if (dev) {
  48. printf("I: ACTION=%sn", udev_device_get_action(dev));
  49. printf("I: DEVNAME=%sn", udev_device_get_sysname(dev));
  50. printf("I: DEVPATH=%sn", udev_device_get_devpath(dev));
  51. printf("I: MACADDR=%sn", udev_device_get_sysattr_value(dev, "address"));
  52. printf("---n");
  53. fflush(stdout);
  54.  
  55. /* free dev */
  56. udev_device_unref(dev);
  57. }
  58. }
  59. /* 500 milliseconds */
  60. usleep(500*1000);
  61. }
  62. /* free udev */
  63. udev_unref(udev);
  64.  
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement