0

新しく接続されたデバイスを監視しています。私は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つの選択を同時に行うにはどうすればよいですか?..ありがとう

4

2 に答える 2

1

select同時に2つのことをする必要はありません。重要なのselectは、同時に複数のファイル記述子のイベントを待つことができるということです。に両方のファイル記述子を追加しFD_SET、を呼び出してselectから、を使用してどちらが設定されているかを確認しFD_ISSETます。

于 2012-11-08T16:37:45.437 に答える
0

私が思うに、あなたはロックのようなメカニズムを使うべきです。

デバイスを継続的にプローブしているデバイスについて、1つのプロセスで継続的にプローブします。

そして、それが他のプロセスに信号を送り、ロック変数を変更したとき

于 2012-11-08T16:38:31.550 に答える