一个简单的SHELL在UNIX系统下创建进程和管理进程

上传人:博****1 文档编号:484843073 上传时间:2023-07-22 格式:DOC 页数:15 大小:58.50KB
返回 下载 相关 举报
一个简单的SHELL在UNIX系统下创建进程和管理进程_第1页
第1页 / 共15页
一个简单的SHELL在UNIX系统下创建进程和管理进程_第2页
第2页 / 共15页
一个简单的SHELL在UNIX系统下创建进程和管理进程_第3页
第3页 / 共15页
一个简单的SHELL在UNIX系统下创建进程和管理进程_第4页
第4页 / 共15页
一个简单的SHELL在UNIX系统下创建进程和管理进程_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《一个简单的SHELL在UNIX系统下创建进程和管理进程》由会员分享,可在线阅读,更多相关《一个简单的SHELL在UNIX系统下创建进程和管理进程(15页珍藏版)》请在金锄头文库上搜索。

1、设计一:设计任务:实现一个简单的shell(命令行解释器),类似于bash, csh等。本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。要求实现的shell支持以下内部命令:1. cd 更改当前的工作目录到另一个。如果未指定,输出当前工作目录。如果不存在,要求有适当的错误信息提示。改命令应能够改变PWD的环境变量。2. environ 列出所有环境变量字符串的设置(类似于Unix系统下的env命令)。3. echo 显示echo后的内容且换行。4. help 简短概要地输出你的shell的使用方法和基本功能。5. jobs输出shell当前的一系列子进程,要求提供子进程的命名和

2、PID号。6. quit, exit, bye退出shell。所有的内部命令应当优于在$PATH中同名的程序。任何非内部命令必须请求shell创建一个新进程,且该子进程执行指定的程序。这个新进程必须继承shell的环境变量和指定的命令行参数。要求实现的shell支持以下内部命令:1. Batch Processing 如果shell启动带有一个文件名作为参数,打开该文件并执行文件里所有命令。待所有进程全部结束退出shell。2. Debugging 提供-v选项,shell启动时打开此选项将在运行过程中输出若干调试信息。在该模式下,shell应该显示所有被创建了的进程的PID号,通报已结束的子

3、进程和传递给子进程的参数等。3. Prompt (命令行提示符) 解释器打印$PS2作为提示符。4. Background Processing 如果命令以符合&终止,在后台并发执行该程序。Shell立即等待下一命令的输入,而不等待该程序的结束。注:所有命令和参数由空格或tab符分隔。实验代码#include #include #include #include #include #include #include /*定义全局变量*/char root_dir3;char pre_dir255;char *cmd_line255;char curuser10;struct userinf c

4、har username10; char userpass10;/*函数申明*/void init();int login();int getcmd();void dir();void cd();void clear();void newdir();void deldir();void del();void copy();void cut();void account();void help();main() init(); while(1)/* 消息循环 */ switch(getcmd() case 0: help(); break; case 1: dir(); break; case

5、2: cd(); break; case 3: newdir(); break; case 4: deldir(); break; case 5: del(); break; case 6: copy(); break; case 7: cut(); break; case 8: account(); break; void init()/* 程序初始化 */ if(login()=0) exit(0); strcpy(pre_dir,C:);/*设定当前目录*/ clear();/* 清屏 */ printf(S Shell-Above Windows XP Ver 1.0n); print

6、f(C) Copyright 2007 stars_625.nn); getchar();/* 清空缓冲区 */int login()/* 程序登陆 */ char name10; char pass10; int logintime=3; FILE *fp; struct userinf inf; while(logintime0)/* 登陆错误超过三次自动退出 */ printf(Login:); scanf(%s,name); printf(Password:); scanf(%s,pass); if(fp=fopen(inf.dll,r)=NULL) printf(Cant open

7、inf.dll file!n); printf(Press any key to exit.); getch(); exit(0); while(fread(&inf,sizeof(inf),1,fp)=1 & strcmp(inf.username,name)!=0) fclose(fp); if(strcmp(inf.username,name)=0) if(strcmp(inf.userpass,pass)=0) strcpy(curuser,inf.username); clear(); return 1; else printf(Login error, Press any key

8、to relogin!n); getch(); clear(); else printf(The user is not exist, Press any key to relogin!n); getch(); clear(); logintime-; printf(Login error above three times, Press any key to exit!); getch(); return 0;int getcmd()/* 获得命令 */ int i=0,j=0,k=0; char buf255; printf(%s,pre_dir);/* 打印提示符 */ fgets(bu

9、f, 255, stdin); cmd_linej = calloc(255, sizeof(char); while (bufi != n & bufi != 0)/* 命令分析 */ if (bufi != ) cmd_linejk = bufi; +k; else cmd_linej + 1 = calloc(255, sizeof(char); k = 0; +j; +i; cmd_linej + 1=0; if(strcmp(cmd_line0,exit)=0) exit(0); else if(strcmp(cmd_line0,/?)=0 | strcmp(cmd_line1,/?

10、)=0) return 0; else if(strcmp(cmd_line0,dir)=0) return 1; else if(strcmp(cmd_line0,cd)=0) return 2; else if(strcmp(cmd_line0,newdir)=0) return 3; else if(strcmp(cmd_line0,deldir)=0) return 4; else if(strcmp(cmd_line0,del)=0) return 5; else if(strcmp(cmd_line0,copy)=0) return 6; else if(strcmp(cmd_line0,cut)=0) return 7; else if(st

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号