我有一个应用程序,我打开一个串行设备(GSM调制解调器),我创建一个伪终端。我想从串行设备读取,过滤数据并通过伪终端发送,因此另一个进程可以读取它,就像它是一个简单的“原始”串行线。
ptFd
- 伪终端文件描述符
devFd
- 串行设备文件描述符
我正在使用posix_openpt( O_RDWR | O_NOCTTY )
,grantpt(ptFd)
,unlockpt(ptFd)
作为伪终端,并为串行线路提供了大量自定义设置。首先尝试我不会在这里发布,但如果它可以帮助任何人解决这个问题,我会这样做。
我的问题如下:
阅读devFd:
056405c0020001009e59
阅读ptFd:
5e45645e45c05e425e405e415e409e59
阅读devFd:
056405c0020001009e59
阅读ptFd:
5e45645e45c05e425e405e415e409e59
我正在编写伪终端上从设备获得的字节,并且:
05改为5e45
00变为5e40
01更改为5e41
02更改为5e42
但是所有不以十六进制的0开头的字节(> =十进制的16)都可以正常传输。
首先......当我在一个伪终端上写字并在同一个过程中读取它时,它不应该反映我刚才写的字节,对吧? 我不熟悉这些终端,但我想当我打开一个终端,用ptsname函数获取slave的名字。在另一个过程中,我可以打开该名称(例如/ dev / pts / 3),从那时起它就像'stream'一样。
最有可能是我错了,但是你可以给我一个简短的澄清吗?提前谢谢。
答案 0 :(得分:1)
这类似于在终端上按Ctrl + C时,^C
被回显的方式。 pty的等效行为是,如果由Ctrl + C,即,0x03生成的ASCII字符写入主端,则它将回显为{{ 1}}, ie ,0x5E 0x03。
通过取消终端属性的^C
字段中的ECHOCTL
标记,可以为Ctrl + C和其他控制字符关闭此行为。
您还可以通过取消设置c_lflag
标志来完全禁用回显。 (我不确定你是否想这样做;我不清楚你在做什么)