您尚未登录。

#1 2018-08-03 14:14:22

xtricman
喵了个咪
注册时间: 2012-12-26
帖子: 515

用户态的终端模拟器为什么要靠伪终端设备来实现?

感觉用Unix domain socket也可以啊,接口没有伪终端设备那么古怪。
终端模拟器进程直接socketpair 创建俩连接的socket然后把一个继承给shell子进程不就好了,终端模拟器进程负责不停的读写另一端并渲染文本。
job control不依赖内核的控制终端功能,用户态应该也可以做到。
所以为啥非要用pty设备?

离线

#2 2018-08-03 23:38:15

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 4,838
个人网站

Re: 用户态的终端模拟器为什么要靠伪终端设备来实现?

让每一个使用伪终端的用户态程序都实现一套终端例程么?虽然也不是不可以。另外还有历史原因吧,终端早在网络成熟之前就有了,伪终端自然也是这部分历史的沿续。

离线

#3 2018-08-04 00:45:03

xtricman
喵了个咪
注册时间: 2012-12-26
帖子: 515

Re: 用户态的终端模拟器为什么要靠伪终端设备来实现?

依云 说:

让每一个使用伪终端的用户态程序都实现一套终端例程么?虽然也不是不可以。另外还有历史原因吧,终端早在网络成熟之前就有了,伪终端自然也是这部分历史的沿续。

终端模拟器打开socket用作服务端,fork后就马上连接作为客户端,把客户端socket 复制到stdin stdout stderr, 然后exec shell, 这样shell 的输入输出就直接被重定向到网络了。其他不用改。
就是协议可能不兼容终端之类的,终端能ioctl调很多属性,这个不太好实现,没了ioctl,程序全都得遵守一套应用层控制协议。而且也保证不了每种terminal协议是一样的。

离线

#4 2018-08-04 00:48:47

xtricman
喵了个咪
注册时间: 2012-12-26
帖子: 515

Re: 用户态的终端模拟器为什么要靠伪终端设备来实现?

或许可以让某些Unicode控制符开始起作用?这样就不用二进制协议了,简单的纯文本读写就好,不用改动CLI工具。

离线

页脚