资源简介
基本功能:
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语言程序设计药房药品管理系统
- C语言:英文单词小助手源代码
- c语言五子棋代码
- C语言 报刊订阅管理系统
- Jacobi迭代法解方程(C语言代码)
- 迷宫问题c语言源代码
- 学生社团管理系统数据结构课程设计
- C语言数据结构迷宫求解的源码
- 谭浩强c语言word版
- C语言实现malloc和free
- C语言经典程序设计源代码之画图软件
- 进程的同步与互斥C语言
- 基于huffman编码的文件解压缩程序(
- C语言电子表格
- C语言linux实现ls功能
- 一个完整的des算法的c语言实现
- c语言RSA算法 这是一个完整的rsa算法
- tftp服务器源码,纯c语言
- 严蔚敏《数据结构》的全部代码实现
- LinuxC语言实现CP命令(edsionte.com)
- C语言指针详解__ppt文件
- FTP客户端程序,c语言编写
- C语言N皇后打印图形版
- Head First_深入浅出C语言(中文版)_带
- 唯一可译码源代码c语言 含报告
- 数据结构课程设计-班级通讯录
- AES密码学课程设计带报告
- 哈希表操作c语言版
- C语言版拼音输入法源代码
- C语言 真值表
评论
共有 条评论