我有一个应用程序,我可以在其中打开串行设备 ( 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
但是所有不以十六进制(>=16 十进制)0 开头的字节都可以正常传输。
首先...当我在一个伪终端上写入并在同一进程中从它读取时,它不应该反射(reflect)我刚刚在上面写入的那些字节,对吗?
我不熟悉这些终端,但我想象当我打开一个终端时,使用 ptsname 函数获取奴隶的名字。从另一个进程中,我可以打开该名称(如/dev/pts/3 ),从那时起它就作为一个“流”。
很可能我错了,但你能给我一个简短的澄清吗?提前致谢。
最佳答案
这类似于当您在终端按下 Ctrl+C 时,^C
被回显。 pty 的等效行为是,如果 Ctrl+C 生成的 ASCII 字符,即,0x03,被写入到 master 端,然后它被回显为 ^C
,即,0x5E 0x03。
通过在终端属性的 c_lflag
字段中取消设置 ECHOCTL
标志,可以为 Ctrl+C 和其他控制字符关闭此行为。
您还可以通过取消设置 ECHO
标志来完全禁用回显。 (我不确定你是否想这样做;我不清楚你在做什么)
关于c++ - 伪终端和串行设备之间奇怪的字符替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075741/