【发布时间】:2019-04-02 10:25:42
【问题描述】:
我正在使用伪 tty(在 Linux 下)为串行设备编写一个简单的模拟器。写入串行设备的程序在仿真器(该程序)在主机端时写入从机端。
我创建了通常的主/从对:
posix_openpt
grantpt
unlockpt
然后我在 /tmp/emulator 中创建一个指向任何 ptsname 返回的软链接。一个小问题是当 slave 关闭时,select 返回并且 read() 返回 EIO。这有点烦人,所以我自己打开 ptsname 来防止这种情况(我通常对管道做同样的事情)。
我使用 tcsetattr 在主机端设置 ICANON,所以我(应该)一次读取一行。该协议是基于行的。
到目前为止一切顺利。除了它没有按预期工作。如果向 PTY 的从端发送一个字节,则 select() 返回并且 read() 读取该字节。这根本不规范!它应该等到收到 \n !
我将使用实际的串行端口和 Arduino 进行测试,看看是否也会发生这种情况。
【问题讨论】:
-
我写了一个额外的测试程序,用 icanon 设置正常打开端口。如果我随后写入 1 个字节(不是 \r 或 \n),另一方会立即收到它。我不认为这是正常的 - icanon 应该意味着“等到你看到一个 \n - 然后 read() 返回整行”。这不是这里发生的事情。
标签: linux serial-port pty