本文介绍了如何* 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的伪终端工作的?什么是主/从通道?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 02:16