设置为规范的伪tty不是规范的

时间:2018-10-29 13:17:23

标签: linux serial-port pty

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

我用以下方法创建通常的主/从对:

posix_openpt
grantpt
unlockpt

然后我在/ tmp / emulator中创建一个指向ptsname返回的软链接。一个较小的问题是,当从属服务器关闭时,select返回,而read()返回EIO。这有点烦人,所以我自己打开ptsname来防止这种情况发生(通常对管道也是如此)。

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

到目前为止,一切都很好。除非它不能按预期工作。如果将单个字节发送到PTY的从属端,则select()返回,而read()读取该字节。这根本不规范!应该等到收到\ n!

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

1 个答案:

答案 0 :(得分:0)

这似乎是预期的行为。我的实验表明,设置icanon后:

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)在说的,但是您必须在两行之间阅读,以了解主服务器也不像终端一样。