Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Linux c++;:多个进程读取同一串行端口?_C++_Linux - Fatal编程技术网

C++ Linux c++;:多个进程读取同一串行端口?

C++ Linux c++;:多个进程读取同一串行端口?,c++,linux,C++,Linux,是否可以让多个进程同时在同一/dev/ttyUSBx设备上执行IO?从我所做的测试来看,最后一个(最近一次)打开句柄进行读取的进程似乎得到了输出。当此进程退出时,下一个最近的进程将再次获得输出 启动进程A-从端口读取输出 启动进程B-从端口读取输出。进程A停止读取。 停止进程B-进程A再次开始读取 连接是否有一个参数,允许两者都获得输出?让它看起来像一个可以分叉原始进程,但我更需要一个长时间运行和多个独立(寿命较短)的作业。在任何操作系统上,多个进程能够共享这样一个基于串行的设备都是不寻常的 您

是否可以让多个进程同时在同一
/dev/ttyUSBx
设备上执行IO?从我所做的测试来看,最后一个(最近一次)打开句柄进行读取的进程似乎得到了输出。当此进程退出时,下一个最近的进程将再次获得输出

启动进程A-从端口读取输出
启动进程B-从端口读取输出。进程A停止读取。
停止进程B-进程A再次开始读取


连接是否有一个参数,允许两者都获得输出?让它看起来像一个可以分叉原始进程,但我更需要一个长时间运行和多个独立(寿命较短)的作业。

在任何操作系统上,多个进程能够共享这样一个基于串行的设备都是不寻常的

您希望进程A和B“订阅”进程C。进程C读取设备并将读取的内容发布给订阅者。通信通道可以是任何适合您的IPC机制,如管道、消息队列或套接字


这通常被称为。

在任何操作系统上,多个进程能够共享这样一个基于串行的设备都是不寻常的

您希望进程A和B“订阅”进程C。进程C读取设备并将读取的内容发布给订阅者。通信通道可以是任何适合您的IPC机制,如管道、消息队列或套接字


这通常被称为。

一种方法是通过使用虚拟COM端口来避免一次只能从一个特定串行(COM)端口读取一个进程

如上所述,该软件允许您在windows上创建虚拟COM端口对。虚拟COM对的工作方式是,当您通过COM-a发送数据时,它将在COM-B上接收,反之亦然

反过来,这允许您在程序中执行以下操作:

  • 侦听真实COM端口上的数据(进程1)
  • 从实际COM端口读取(进程1)
  • 存储您阅读的内容(流程1)
  • 通过虚拟COM端口对发送存储的数据(进程1)
  • 侦听虚拟COM端口对上的传入数据(进程2)
  • 读取、存储和使用接收到的数据(过程2)
  • 通过这种方式,您可以在两个进程中使用通过实际COM端口提供的数据,而不会遇到一个进程阻止另一个进程读取COM端口的问题。您可以反向使用相同的步骤将数据从进程2写回实际COM端口。唯一不好的一面是,进程2接收或发送数据时会有短暂的延迟

    我在需要截取和处理另一个应用程序连接的COM端口的数据的情况下使用此解决方案。因此,我只是将应用程序连接到一个虚拟COM端口,我的进程将从真实COM端口接收的原始数据转发到该虚拟COM端口

    希望这有帮助


    注意:上述程序适用于Windows,不确定是否有Linux版本,但也许您可以找到类似的Linux版本。

    解决一个问题的一种方法是使用虚拟COM端口,即一次只能有一个进程读取特定串行(COM)端口

    如上所述,该软件允许您在windows上创建虚拟COM端口对。虚拟COM对的工作方式是,当您通过COM-a发送数据时,它将在COM-B上接收,反之亦然

    反过来,这允许您在程序中执行以下操作:

  • 侦听真实COM端口上的数据(进程1)
  • 从实际COM端口读取(进程1)
  • 存储您阅读的内容(流程1)
  • 通过虚拟COM端口对发送存储的数据(进程1)
  • 侦听虚拟COM端口对上的传入数据(进程2)
  • 读取、存储和使用接收到的数据(过程2)
  • 通过这种方式,您可以在两个进程中使用通过实际COM端口提供的数据,而不会遇到一个进程阻止另一个进程读取COM端口的问题。您可以反向使用相同的步骤将数据从进程2写回实际COM端口。唯一不好的一面是,进程2接收或发送数据时会有短暂的延迟

    我在需要截取和处理另一个应用程序连接的COM端口的数据的情况下使用此解决方案。因此,我只是将应用程序连接到一个虚拟COM端口,我的进程将从真实COM端口接收的原始数据转发到该虚拟COM端口

    希望这有帮助


    注意:上述程序适用于Windows,不确定是否有适用于Linux的版本,但可能您可以找到适用于Linux的类似程序。

    可能没有。你需要某种多路复用器。否则,数据将如何路由?DTR和RTS也可能处于不一致的状态。此外,在没有进程读取端口的情况下(在一段时间间隔内)-接收到的任何数据将流向何处?进程如何转移对端口的控制?它们不能同时读取,因为你不知道哪个进程得到了哪个字节。可能是重复的-可能不是。你需要某种多路复用器。否则,数据将如何路由?DTR和RTS也可能处于不一致的状态。此外,在没有进程读取端口的情况下(在一段时间间隔内)-接收到的任何数据将流向何处?进程如何转移对端口的控制?它们不能全部同时读取,因为您不知道哪个进程获得了哪些字节。可能的重复-您可以为此使用zeroMQ。它速度快、重量轻。您可以使用zeroMQ来实现此目的。它速度快,重量轻。