Bonjour,
Je souhaite être notifié lors d'un changement (plug ou unplug) de device sous linux.
Pour cela j'utilise la libUdev comme ceci.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
#include <libudev.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <unistd.h>
 
int main (void)
{
	struct udev *udev;
	struct udev_device *dev;
   	struct udev_monitor *mon;
 
	// Create the udev object
	udev = udev_new();
 
	if (!udev)
	{
		printf("Can't create udev\n");
		exit(1);
	}
 
	mon = udev_monitor_new_from_netlink(udev, "udev");
	udev_monitor_filter_add_match_subsystem_devtype(mon, "usb", "usb_device");
	udev_monitor_enable_receiving(mon);
	while (1) 
	{
		dev = udev_monitor_receive_device(mon);
		if (dev)
		{
			printf("Got Device\n");
			printf("   VID/PID: %s %s\n", udev_device_get_sysattr_value(dev,"idVendor"), udev_device_get_sysattr_value(dev, "idProduct"));
			printf("   Manuf: %s\n   Product: %s\n", udev_device_get_sysattr_value(dev,"manufacturer"), udev_device_get_sysattr_value(dev,"product"));
			printf("   Serial: %s\n", udev_device_get_sysattr_value(dev, "serial"));
			printf("   Node: %s\n", udev_device_get_devnode(dev));
			printf("   Subsystem: %s\n", udev_device_get_subsystem(dev));
			printf("   Devtype: %s\n", udev_device_get_devtype(dev));
			printf("   Action: %s\n", udev_device_get_action(dev));
			udev_device_unref(dev);
		}
		else 
		{
			printf("No Device from receive_device(). An error occured.\n");
		}					
	}
	udev_unref(udev);
	return 0;
}
Ce code tiré de "http://www.signal11.us/oss/udev/" me permet d'être notifié quand un device USB est modifié.

J'aimerai pouvoir ajouter un filtre ou supprimer un filtre sans perdre de notification. Mais dans la doc (http://www.freedesktop.org/software/...able-receiving) dit que l'on doit ajouter les filtres avant d'"activer" le monitor.
Pour faire cela la fonction "udev_monitor_receive_device(mon)" sera appelée dans un autre thread.

Est ce qu'il existe un moyen de mettre a jour la liste des filtres sans risque de louper une notification?

Merci d'avance pour vos réponse.
ps: je ne sais pas si il faut mettre ce post dans la section linux c++ ou autre.