【发布时间】:2012-10-28 21:36:01
【问题描述】:
我正在监控新插入的设备。我正在使用 libudev.h 来做我想做的事。
while(1){
ret = select(fd+1, &fds, NULL, NULL, NULL);
if(ret<0){
perror("select() failed. Exitting...");
exit(EXIT_FAILURE);
}
if (FD_ISSET(fd, &fds)) {
dev = udev_monitor_receive_device(mon);
if (dev) {
printf("New device attached\n");
printf(" Node: %s\n", udev_device_get_devnode(dev));
printf(" Action: %s\n", udev_device_get_action(dev));
udev_device_unref(dev);
if(strcmp("/dev/ttyUSB0", udev_device_get_devnode(dev))==0){
fd1 = open("/dev/ttyUSB0");
if (fd<0) exit(0);
FD_SET(fd1, &fds);
select(fd1+1, &fds, NULL, NULL, NULL);
if (FD_ISSET(fd1))
//Read from the serial device and echo back to serial device when data is received
}
}
}
else {
printf("No Device from receive_device(). An error occured.\n");
}
}
现在,例如一个设备被插入并且节点是 /dev/ttyUSB0 我需要打开它并监视它的文件描述符。坐下来等待数据可用。
fd1 = open("/dev/ttyUSB0");
if (fd<0) exit(0);
FD_SET(fd1, &fds);
select(fd1+1, &fds, NULL, NULL, NULL);
if (FD_ISSET(fd1)){
//Read from the serial device and echo back to serial device when data is received
}
在监控 /dev/ttyUSB0 的 fd 时,第一个选择必须继续对设备进行监控。我应该如何同时进行 2 个选择?.. 谢谢
【问题讨论】:
-
我可能是错的,但我认为典型的 linuxy 要做的事情是分叉一个孩子,让他们担心特定的设备,而父母继续监听更多的设备。许多 linux 守护进程以这种方式运行。
-
是和不是。一些守护进程这样做,因为它允许用户重新启动主守护进程(例如,当切换到新版本时)而不中断现有连接;但是,这需要额外的逻辑,以便新的主进程识别现有的子进程。