先说一下这个shell的设计的基本思想。不提供程序设计功能,指示提供一个简单的用户接口以使用操作系统。首先,判断启动shell时的参数,如果有参数的话,则可能需要进行输入输出的重定向,要从文件中一行行的读入命令行,或者将输入送入一个文件中。其他的参数报错。然后进入一个主大循环,获得命令行,之后用一个函数来解析命令行。将命令行看成是由空字符(一个或多个)分隔的几个域组成的,因为参数需要多个模块共同访问,所以解析的结果将存入一个全局的而为字符数组数组中,每一个域占用一行。然后检测第一个域的内容,根据第一个域来执行相应的内部命令或者外部命令。每一个内部命令用一个模块,一组函数来实现。
首先遇到的自然是输出提示符的问题,我们现在用的经典的bash shell基是根据PS1环境变量的值,来输出相应的字符串。默认的提示符格式是:[username@hostname dirname]$
我们的shell也就暂时不提供PS1这么强大的功能了,而直接使用bash的默认提示符就好了。
1、在实际编写的过程中,遇到的第一个问题就是fgets的行为问题
fgets是标准C lib里边的一个获得行输入的函数
fgets的函数原型为:
char *fgets(char *restrict buf, int n, FILE *restrict fp);
返回值:若成功则返回buf,若已到达文件尾或出错则返回NULL
第一个参数buf是输入数据所要保存到的缓冲区,第二个参数是缓冲区长度,第三个参数是获得数据输入的文件流。
它竟然会在每获得的一行的末尾保存一个换行符,真的是让人小困惑了一会儿。
阅读(1874) | 评论(1) | 转发(0) |