我正在监控新插入的设备。我正在使用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时,第一个select必须继续对设备执行作业监视。我应该如何同时做两个选择?.谢谢
发布于 2012-11-09 00:37:45
您不需要同时执行两个select。select的全部意义在于,您可以同时等待多个文件描述符上的事件。将这两个文件描述符都添加到FD_SET中,调用select,然后检查使用FD_ISSET设置的是哪一个。
发布于 2012-11-09 00:38:32
我认为,您应该使用一种锁定机制。
持续探测该设备的一个进程,该进程将持续探测该设备。
然后,当它只向另一个进程发送信号并修改lock变量时
https://stackoverflow.com/questions/13293285
复制相似问题