首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置为canonical的伪tty不是canonical

设置为canonical的伪tty不是canonical
EN

Stack Overflow用户
提问于 2018-10-29 21:17:23
回答 1查看 150关注 0票数 0

我正在使用伪tty (在Linux下)为串行设备编写一个简单的仿真器。写入串行设备的程序在仿真器(此程序)位于主机端时写入从机端。

我使用以下命令创建通常的主/从对:

代码语言:javascript
复制
posix_openpt
grantpt
unlockpt

然后,我在/tmp/模拟器中创建了一个软链接,指向任何ptsname返回的内容。一个小问题是,当从进程关闭时,select return和read()返回EIO。这有点恼人,所以我自己打开ptsname来防止这种情况(我通常对管道做同样的事情)。

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

到目前一切尚好。只是它并不像预期的那样工作。如果向PTY的从机端发送一个字节,则select()返回,read()读取该字节。这一点也不规范!它应该等待直到接收到\n!

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

EN

回答 1

Stack Overflow用户

发布于 2018-11-01 06:27:01

这似乎是意料之中的行为。我的实验表明,当设置icanon时:

代码语言:javascript
复制
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)所说的,但你必须理解字里行间的意思,才能意识到主机并不同时充当终端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53046340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档