首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监控设备中的嵌套select

监控设备中的嵌套select
EN

Stack Overflow用户
提问于 2012-11-09 00:28:51
回答 2查看 135关注 0票数 0

我正在监控新插入的设备。我正在使用libudev.h做我想做的事情。

代码语言:javascript
复制
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,我需要打开它并监视它的文件描述符。坐着等待数据可用。

代码语言:javascript
复制
    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必须继续对设备执行作业监视。我应该如何同时做两个选择?.谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-09 00:37:45

您不需要同时执行两个selectselect的全部意义在于,您可以同时等待多个文件描述符上的事件。将这两个文件描述符都添加到FD_SET中,调用select,然后检查使用FD_ISSET设置的是哪一个。

票数 1
EN

Stack Overflow用户

发布于 2012-11-09 00:38:32

我认为,您应该使用一种锁定机制。

持续探测该设备的一个进程,该进程将持续探测该设备。

然后,当它只向另一个进程发送信号并修改lock变量时

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13293285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档