2013-03-14 65 views
7

我已经在网上查找包括在一些建议或指针的stackoverflow,但我发现的任何东西是压倒性的,我不确定从哪里开始。如果我忽略了某些明显的道歉,我深表歉意。如何建立一个基本的终端从零开始

我想了解一个终端是如何工作的,我想从头开始构建一个,我很乐意提供任何有关终端所需的概念和功能的建议或建议,但我不只是希望链接源代码。我发现了很多开源项目,但是我发现它们令人难以置信。

我会理想地喜欢建立我自己的终端,可以在OS X,Linux和/或Windows上运行(我可能会使用Java但会考虑其他语言),并最终有一个Web界面(想要我的控制台在我的浏览器中)我知道这已经完成,但我想自己做,所以我可以详细了解它是如何工作的,只是有一个项目要做。

我真正想要的是阅读材料/教程给我一些指导的起点。如果这意味着退后一步更基本的终端,我很乐意这样做,一旦我有一些实际的编程,这将使我朝着主要目标前进

+0

这太宽泛了,SO并不是真正的全面演练或推荐资源。我建议你看看现有终端的来源。 (在java中至少有两个:[JCTerm](http://www.jcraft.com/jcterm/)和[Terminator](http://software.jessies.org/terminator/)) – millimoose 2013-03-14 12:09:55

+0

@millimoose肯定在任何终端中都有基本的概念或功能?这是我很困惑 – jonnie 2013-03-14 12:59:35

+1

调查虚拟TTYs和ansi控制代码 – Dougvj 2013-03-14 16:05:12

回答

1

终端背后的想法是一个解释和执行每个命令的无限循环。下面是Perl中的例子:

use strict; 
use warnings; 

while(<>) { 
    system($_); 
} 

exit 0; 

我知道Perl是不是最简单的语言来读(但肯定是最快的写入),但是这是所有你需要了解上面的程序:

<>从标准输入读取。

system($_)执行该命令(其中$_是一个特殊的Perl变量,它在循环中工作并表示当前评估的项目,因此在我们的情况下为给定的命令)。

您可以尝试运行上述程序将其保存在您的计算机上作为foo.pl,打开终端并执行perl foo.pl

所以,这是基本的想法。我认为每种语言都会执行一个命令system,这个命令的作用是一样的(名字可能会改变,但它可能也是一样的)。您可以看看man system以了解此命令在C中的工作方式。我不了解Java,但我确信你必须搜索类似的东西。从这个起点,我认为你可以开始建立自己的终端。

+0

这是一个shell,而不是终端。 – millimoose 2013-03-14 13:58:02

+1

@millimoose,是的,谢谢你指出区别。但是,如果我理解的很好,我可以把这个shell变成一个终端,添加另一个叫它里面的软件,不是吗? – Zagorax 2013-03-14 14:34:00

+2

您可以通过掌握足够的功能将任何东西变成任何东西。我的意思是,OS shell是解释启动和管理其他进程的命令的东西。一个典型的GUI终端仿真器可以将shell的输出(文本和控制字符)渲染到一个窗口中,并从GUI工具包中获取键盘事件,并将它们转换为shell能够理解的内容(再次输入stdin和控制字符)。它们是相关的软件,这就是为什么你可以将它们组合在一起,但它们执行完全不同的任务。 – millimoose 2013-03-14 14:40:41

2

创建到目标计算机的套接字连接,[从中读取,显示],[等待用户输入,显示,发送到套接字],重复。你有基本的终端。