免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1403 | 回复: 1
打印 上一主题 下一主题

读伪终端的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-08 10:05 |只看该作者 |倒序浏览
本帖最后由 amazingjxq 于 2010-05-08 10:07 编辑

建立了一个伪终端,子进程用来exec pppd, pppd的stdin stdout 都设为slave。父进程从master 读取pppd发送的数据。
pppd启动之后首先会发送ConfReq,正确的数据应该是这个样子的:
ff 03 c0 21 01 01
但是从master那边读出来的却是这个样子:
7e ff 7d 23 c0 21 7d 21 7d 21
下面的是设置master属性的代码,就是apue里面的raw模式。

  1.     tcgetattr(fdm, &term);
  2.     old = term;
  3.     term.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
  4.     term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
  5.     term.c_cflag &= ~(CSIZE | PARENB);
  6.     term.c_cflag |= CS8;
  7.     term.c_oflag &= ~(OPOST);
  8.     term.c_cc[VMIN] = 1;
  9.     term.c_cc[VTIME] = 0;
  10.     tcsetattr(fdm, TCSANOW, &term);
复制代码
也曾试过把oflag 和 iflag都设为0, 不过还是一样。
到底是错在了什么地方呢?
顺便问一句,怎么把master的属性改之后,slave的属性也改掉了?

论坛徽章:
0
2 [报告]
发表于 2010-05-08 15:56 |只看该作者
刚刚修改了一下,不再使用pppd作为子进程,而是直接在里面写了一句write(1, output, 256),
发现父进程收到的数据就是原始的数据。这样可以说明不是伪终端的问题而是pppd的问题吧?
有哪位知道pppd的哪个参数会导致这样的结果:
ff 03 c0 21 01 01
输出变成
7e ff 7d 23 c0 21 7d 21 7d 21
好像就是有的0开头的加了个7d20,后面还有很多数据都没有写,都是这个样子的。
难道这是一种传输方式?或者是校验?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP