本文介绍了如何* nix的伪终端工作的?什么是主/从通道?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想编写一个简单的,愚蠢的,X终端用C模拟器在Linux系统上。
起初,我只是想我会popen方法外壳并显示其输出。
我检查的xterm和rxvt code,它看起来有点复杂。
首先,我要开一个伪终端与openpty。所以,我看手册页,看到openpty填补2文件描述符,主机和从机。
双方的xterm和rxvt code是凌乱的,因为这些特价文件系统相关的岬的。
我理解的东西termios的:它只是一堆关于终端的逃逸code的信息。
我真的不明白的是:什么是我的主/从文件描述符做
这打开一个终端,登录,示例程序执行对shellLS将是真棒。
的(英语不是我的母语,原谅我的失误最终)的
编辑:
这是我想出了样品code:
的#include<&stdlib.h中GT;
#包括LT&;&stdio.h中GT;
#包括LT&;&unistd.h中GT;
#包括LT&;&string.h中GT;
#包括LT&;&pty.h GT;
#包括LT&;&utmp.h GT;
#包括LT&;&文件ctype.h GT;空虚
safe_print(字符* S)
{
而(* S){
如果(* S =='\\ n')
的putchar(\\ n);
否则如果(iscntrl判断(* S))
的printf(\\\\ E(%D),* S);
其他
的putchar(* S);
小号++;
}
}
INT
主(INT ARGC,字符** argv的)
{
焦炭BUF [BUFSIZ] = {0};
INT主;
INT RET = forkpty(安培;主,NULL,NULL,NULL); 如果(RET == -1)
卖出期权(无分支),退出(0); 如果(!RET){
EXECL(/ bin / sh的,SH,NULL);
出口(0);
} 睡眠(1); / *让shell中运行* /
如果(的argc&GT = 2){
写(主,ARGV [1]的strlen(ARGV [1]));
写(主,\\ n,1);
}其他{
写(主,日期\\ n,sizeof的日期\\ n);
}
而(1){
开关(RET =读(主,BUF,BUFSIZ)){
情况1:
看跌期权(错误!);
出口(1);
打破;
情况下0:
看跌期权(没什么..),睡觉(1);
打破;
默认:
BUF [返回] ='\\ 0';
safe_print(BUF); }
} 接近(主); 返回0;
}
解决方案
对于你的问题的主/从一部分,从<一个href=\"http://www.freebsd.org/cgi/man.cgi?query=pty&apropos=0&sektion=4&manpath=FreeBSD+7.1-RELEASE&format=html\">pty(4)手册页(这是从openpty(3)手册页引用我的系统上):
Man pages are your friends.
这篇关于如何* nix的伪终端工作的?什么是主/从通道?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!