我正在为学校开展一个独立项目,我需要一些关于可能资源的指导。基本上,我正在尝试用C或C ++构建一个Unix风格的shell(可能稍后移植到Windows)。我将以模块化的方式添加shell命令,随时添加功能。最后一步是通过“连接”命令,允许用户连接到我设计的telnet BBS。 BBS也只具有基本的骨架功能。是的,我可能会有新闻报道,也许是一个基本的应用程序和一个基本的门游戏。
我真的不需要编程方面的帮助(至少,还没有),但我一直无法找到好的资源来帮助我。我正在寻找的是一本关于shell编程的好书(不是编写脚本,而是从头开始编写shell,以及它与底层系统的各种交互),以及一本关于添加telnet功能的好书 - 我的意思是我想将我的计算机用作服务器,并允许其他几个用户连接以测试我的系统是否正常工作。我目前正在阅读Sans“24小时内自学TCP / IP”,这对于对CS,算法,数据结构等有很好理解的人来说非常有用。我只需要更具体的东西。
只是一点背景 - 我是普渡大学计算机科学专业的二年级学生,我正在进行这项独立研究,以便将迄今为止学到的许多概念联系在一起。如果有人能指出我真正优秀的资源,我将非常感激。
如果您需要更多详细信息或说明,请告知我们,以便向我指出相应的资源。请注意,如果它被证明是有价值的资源,我愿意购买任何可用的书籍。此外,我确实尝试在SO上搜索这些资源,但大多数问题似乎过于具体(通常是关于某人在执行shell时遇到的问题等);我也希望得到有经验的程序员在该领域的个人建议。
提前致谢。 -S
PS-为年轻程序员澄清“BBS” - 这是互联网之前存在的。 2400波特调制解调器上的旧学校,拨号,基于文本的公告板系统。我显然无法重新创建,但我希望使用telnet或SSH来综合体验。有关telnet BBS的更多信息,请参阅http://www.telnetbbsguide.com/。但是,我需要能够编写自己的软件,它只具有真正BBS的一小部分功能。但是,我不确定我需要寻找什么才能了解更多相关信息 - 我应该查看服务器书籍,网络书籍还是其他内容?
PPS-更多澄清。我在BBS上看到的大部分书籍都是关于如何使用预先存在的软件设置,运行和维护BBS作为sysop的书籍。我需要做的是自己编写软件。我可能会使用telnet,因为它似乎更容易使用SSH(至少,编程 - 请纠正我,如果我错了)。我的朋友推荐我得到一本关于模式的书,还有一本“实用程序员”。如果他指的是我想要建立的正确方向,请告诉我。另外,作为旁注,我确实对编程,算法和数据结构有相当不错的(如果是基本的)知识 - 但绝对不了解网络或服务器,我不确定我实际需要知道多少为了开始这个项目的开发。好吧,我对网络有点了解,而不是从程序员的角度来看。再次感谢大家。
答案 0 :(得分:2)
有一本关于编程unix shell的书!由 Axel Tobias-Schreiner 撰写, ooc.pdf 的杰出作者,“面向对象的C” PDF(Google it,但不要忘记他的名字!)。
它被称为“使用C与Curses,Lex和Yacc:为Unix System V构建一个窗口外壳”, Prentice Hall,1990 ;它确实应该被认为是在 K& R “C编程语言”中开始的传奇的第3部分,并且继续在 K& P的后半部分 “UNIX编程环境”。
本书描述的shell是一个流氓风格的“窗口系统”,在终端内部工作(使用curses),它包括一个文本文件查看器,以及一个在这些“窗口”内运行命令的命令语言解释器。命令语言使用lex和yacc来实现词法分析器/解析器。因此,本书介绍了做这些事情,C语言中的大型文档程序,以及使用curses,复杂选项处理以及使用备受吹捧的标准unix工具实现编程语言的片段的金矿。
答案 1 :(得分:1)
我从来没有见过一本关于贝壳编程的书,虽然我很乐意发现这样的东西存在。
但实际上,是不是编写了一个基本上是list of features的shell,你将实现和评估的顺序如何解释用户的输入?您可以在“经典壳程序设计”,Robbins和Beebe AND的“C Shell现场指南”(Andersons)以及可能的其他人中看到关于评估顺序的良好记录。
当然,你可以通过挖掘shell,bash,z shell,ksh的可用源代码来学到很多东西。
抱歉,我对您的问题的BBS服务器部分没有任何想法。当您发现SAMS书有用时,我建议您查看W. Richard Stevens' Network Programming Series of books,这是99%的Unix网络编程,可能不是您想要的。
(最后,考虑更改bash或zsh的推荐标记,因为SO上的许多常规贡献者通过搜索“他们的”标记来检查新问题。能够更好地回答您问题的人可能无法阅读它)< / p>
我希望这会有所帮助。