资源简介
基本功能:
1.基本的内部命令。如:cd, ls, pwd 等;
2.能处理后台程序(不需要wait)
3.具有管道和重定向功能。如输入:who | wc -l 进行测试;
4.可以处理多条命令,以';'分隔, 滤掉无效的空格、tab符等;
代码片段和文件信息
////////////////////////////////////////////////////////////////////
/*******************************************************************
MyShell 1.0 Copyright @ fc 2011
功能说明:
1.基本的内部命令。如:cd ls pwd 等;
2.能处理后台程序(不需要wait)
3.具有管道和重定向功能。如输入:who | wc -l 进行测试;
4.可以处理多条命令,以‘;‘分隔 滤掉无效的空格、tab符等;
*******************************************************************/
////////////////////////////////////////////////////////////////////
#include
#include
#include
#include
#include
#include
#include
//子函数声明
char *get_input(); //获取用户的输入
int count_command(char *input); //统计命令数量
char **get_command(char *input); //分离出每条命令
int count_pipe(char *command); //统计管道数量
int do_pipe(char *command); //管道处理
int redirect(char *command); //重定向处理
int count_argv(char *command); //统计参数个数
char **get_argv(char *command); //分离出参数
char *get_com_path(char *command); //获得命令路径
//主程序
int main()
{
int i num;
char *input **command;
//清屏并显示版本信息
system(“clear“);
printf(“*********************************\n“);
printf(“ MyShell 1.0 Copyright @ fc 2011\n“);
printf(“*********************************\n“);
while(1)
{
//显示当前路径
printf(“%s:$ “ getcwd(NULL0));
//获取用户的输入
input=get_input();
if(input==NULL) continue;
//统计命令数量,以‘;‘分隔
num=count_command(input);
if(num==0) continue;
//分离出每条命令
command=get_command(input);
//处理每条命令
for(i=0; i {
//检查命令中是否有管道符号
if(count_pipe(command[i]))
do_pipe(command[i]);
else
redirect(command[i]);
}
//释放申请的内存空间
for(i=0; i free(command[i]);
free(command);
free(input);
}
return 0;
}
//获取用户的输入
char *get_input()
{
int i;
char *input;
if((input=(char *)malloc(100*sizeof(char)))==0)
{
perror(“malloc“);
return NULL;
}
for(i=0; i<100; i++)
{
input[i]=getchar();
if(input[i]==‘\n‘)
{
input[i]=‘\0‘;
break;
}
}
//输入的内容过长
if(i==100)
{
printf(“input too long!\n“);
return NULL;
}
return input;
}
//统计命令数量
int count_command(char *input)
{
int i num=0;
int len=strlen(input);
for(i=0; i if(input[i]!=‘ ‘&&input[i]!=‘ ‘)
break;
//输入中有语法错误
if(input[i]==‘;‘)
{
printf(“syntax error!\n“);
return 0;
}
//输入中只有空格或TAB
if(i==len) return 0;
for(i=0; i {
if(input[i]==‘;‘)
{
for(i++; i if(input[i]!=‘ ‘&&input[i]!=‘ ‘)
break;
//输入中有语法错误
if(input[i]==‘;‘)
{
printf(“syntax error!\n“);
return 0;
}
else num++;
}
}
return ++num;
}
//分离出每条命令
char **get_command(char *input)
{
char **command;
int i j
- 上一篇:C语言程序设计药房药品管理系统
- 下一篇:SHA1加密算法的c++实现
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论