gpt4 book ai didi

linux - 设置为 canonical 的伪 tty 不是规范的

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:32 24 4
gpt4 key购买 nike

我正在使用伪 tty(在 Linux 下)为串行设备编写一个简单的模拟器。写入串口设备的程序,当仿真器(本程序)在主机端时写入从机端。

我创建了通常的主/从对:

posix_openpt
grantpt
unlockpt

然后我在/tmp/emulator 中创建一个软链接(soft link)到 ptsname 返回的任何内容。一个小问题是当 slave 关闭时,select 返回并且 read() 返回 EIO。这有点烦人,所以我自己打开 ptsname 来防止这种情况(我通常对管道做同样的事情)。

我使用 tcsetattr 在主端设置 ICANON,所以我(应该)一次读取一行。该协议(protocol)是基于线路的。

到目前为止一切顺利。除了它没有按预期工作。如果将单个字节发送到 PTY 的从属端,则 select() 返回并且 read() 读取该字节。这根本不是规范的!它应该等到收到\n!

我将使用实际的串行端口和 Arduino 进行测试,看看是否也会发生这种情况。

最佳答案

这似乎是预期的行为。我的实验表明,当设置图标时:

Open /dev/pty/x:
write() bytes, 1 at a time ---> each appears on master immediately

Master end
write() bytes, 1 at a time ---> does NOT appear on /dev/pty/x slave until \n

换句话说,从端,位于/dev/pty/x 的端就像一个终端。关闭回显、设置行模式、翻译cr和lf等或规范模式等所有操作都可用。

主端不是终端。它只允许向/从从端发送和接收数据。

这就是pty(7)是在说,但你必须从字里行间看出主人并不像一个终端。

关于linux - 设置为 canonical 的伪 tty 不是规范的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com