如何用C实现自己的基本unix shell?
我是处理和线程管理的新手。我的Shell应该理解如何用C实现自己的基本unix shell?,c,unix,shell,command-line,interpreter,C,Unix,Shell,Command Line,Interpreter,我是处理和线程管理的新手。我的Shell应该理解PATH环境变量。它可以设置和修改。它以两种方式运行-交互和批处理模式。壳牌能够像ls一样承担多个工作;附言wc文件;卡尔。我也想在信号上弄脏我的手。所以我也应该处理^K,^c 我知道我将不得不使用exec、fork和pipes,但就是不能开始使用。所有unix shell都是开源的,因此阅读代码可能是一个好的开始 如果你想找一篇关于这个主题的入门文章,可以从《Linux公报》上找到 另一个很好的起点是查看的源代码,因为它是让您头脑清醒的最小代码之
PATH
环境变量。它可以设置和修改。它以两种方式运行-交互和批处理模式。壳牌能够像ls一样承担多个工作;附言wc文件;卡尔。我也想在信号上弄脏我的手。所以我也应该处理^K,^c
我知道我将不得不使用exec、fork和pipes,但就是不能开始使用。所有unix shell都是开源的,因此阅读代码可能是一个好的开始 如果你想找一篇关于这个主题的入门文章,可以从《Linux公报》上找到 另一个很好的起点是查看的源代码,因为它是让您头脑清醒的最小代码之一。您的主要循环是:
- 读一行(使用
读一个简单的shell,使用fgets(3)
读一个漂亮的shell)readline(3)
- 解析命令
- 分叉并执行管道
yacc(1)
生成一个。使用yacc
创建初始解析器要容易得多,但调试它时可能会遇到困难,而且它确实希望与上下文无关。我更喜欢递归下降,但世界上几乎所有其他人都喜欢使用yacc。(从技术上讲,野牛
)如果外壳真的很简单,比如家庭作业外壳,那么yacc可能是杀伤力过大
要进行词法分析,您还可以自己使用或使用flex
您不需要使用任何线程。许多描述主系统调用的Unix书籍还实现了一个shell来说明如何以及为什么使用各种调用。Stevens和Rochkind是两本这样的书:
- 理查德·史蒂文斯,斯蒂芬·拉戈
- 马克罗金德
readline()
——只要你使用这个shell,你的生活就会变得无限轻松。但是+1表示陷入yacc/野牛的困境。很好的工具,但很难简化。如果你只想从YoyurShell执行程序,那么你不需要解析器和词法分析器。。。但是,如果您确实想做“其他”事情,那么我建议您使用flex+yacc。。。不要自己滚,我明白了。但我也想在信号上弄脏我的手。所以我也应该处理^K,^c。