操作系统 shell模拟编辑器

一、什么是shell
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
——《百度百科》

shell命令编辑器更多地用于unix/linux系统之中。

二、节选程序

int main()
{
/****************************声明程序中用到的函数*****************************/
	int redirect();                                     /*重定向命令的处理函数*/
	int pipel();                                          /*管道命令的处理函数*/
	int get_line();                                           /*读取一行的函数*/
	int is_founded();                                         /*查找命令的函数*/
	void init_environ();                                /*初始化环境变量的函数*/
	void getenviron();                                  /*初始化查找路径的函数*/
	void add_history(const char *string);/*调用上下方向键实现history命令的函数*/
	void add_his_link();                               /*记录history命令的函数*/
	void history_cmd();                                /*显示history命令的函数*/
	void cd_cmd();                                          /*处理cd命令的函数*/
	void jobs_cmd();                                      /*处理jobs命令的函数*/
	void add_node();                          /*向jobs命令的链表中增加节点函数*/
	void del_node();                          /*向jobs命令的链表中删除节点函数*/
	void ctrl_z();                                /*处理用户按下ctrl_z时的函数*/
    void setflag();                                       /*将标志位置一的函数*/
	void bg_cmd();                                          /*处理bg命令的函数*/
	void fg_cmd();                                          /*处理fg命令的函数*/
	init_environ();                 /*初始化环境变量,将查找路径至于envpath[]中,
									         //初始化history,和jobs的头尾指针*/
	while (1)
	{
		char c,*arg[20];
		char hostName[60],path_string[40];
		int i=0,j=0,k=0,is_pr=0,is_bg=0,input_len=0,path,pid=0,status=0,is_addpre=0,is_exe=0,is_absolute=0;

/****************************    设置signal信号  *****************************/
		struct sigaction action;//sigaction()函数用于改变进程接收到特定信号后的行为
		action.sa_sigaction=del_node;//指向“新式”信号处理函数的指针
		sigfillset(&action.sa_mask);//sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号集搁置
		action.sa_flags=SA_SIGINFO;//sa_flags置为SA_SIGINFO(使用新式
		sigaction(SIGCHLD,&action,NULL);
		signal(SIGTSTP,ctrl_z);

/****************************      打印提示符    *****************************/
		path=get_current_dir_name();//获得当前路径名
		gethostname(hostName,sizeof(hostName));//gethostname() : 返回本地主机的标准主机名

        sprintf(path_string,"%s",path); //path路径
		strcat(hostName,"@");
		strcat(hostName,path_string);
		strcat(hostName,"#");          //近似构成linux下的shell提示符

		char * p =readline(hostName);  //使用readline实现tab补全
		if(strlen(p)==0)
			continue;//当字符串p的长度为0时,即用户只是按下回车键,并没有输入任何字符,因此不需要对后面的操作进行处理
		add_history(p);                //调用<readline/history.h>头文件中的add_history函数实现上下方向键的history命令

/*******
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值