我正在开发一个项目,该项目将使用串行端口连接的“虚拟设备”(python 进程)与也使用串行端口的真实设备连接起来,并且我正在使用伪终端连接多个(超过 2 个)这些串行端口通信过程(建模串行设备)在一起,我遇到了一些障碍。
我有一个 python 进程,它生成伪终端,将 pty 的从端符号链接到文件(因此进程可以为文件名创建一个 pyserial 对象),而主端由我的 pty 生成进程保存并读取;当数据进入一个主控时,数据会被记录下来,然后写入其他主控。如果聆听过程始终存在,则此方法有效。
问题是虚拟设备何时死机或从未启动(这是该项目的有效用例)。在我的系统上,似乎如果数据被写入 pty 的主端,如果没有任何东西在听从端,则在该主端上调用 read 将返回刚刚写入的数据!这意味着设备不止一次地接收相同的数据——不好!
例子:
>>master, slave = pty.openpty()
>>os.write(master,"Hello!")
6
>>os.read(master,6)
'Hello!'
我希望对 read() 的调用阻塞,直到从站发送数据。其实这是slave设备的行为——它可以写,然后os.read(slave,1)会阻塞直到master写数据。
我的“虚拟设备”需要能够传递文件名来打开串口对象;我试图对主端进行符号链接,但这会导致我的虚拟设备打开 /dev/ptmx,这会创建一个新的伪终端对,而不是链接回已经存在的从属!
有没有办法改变主人的行为?或者甚至只是获取与从设备相对应的主设备的文件名(不仅仅是/dev/ptmx)?
提前致谢!