1.功能
1.实现 管道( | )
2.实现 输入输出重定向(<> >>)
3.实现 后台运行( &)
4.实现 内建命令(cd )
5.屏蔽一些信号(如ctrl + c 不能终止)
6.通过设置环境变量 可以直接使用 (在任意地方都可以运行你的shell)
2.代码分析
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <pwd.h>
#include <dirent.h>
#define nomal 0 //默认情况
#define out 1 //输出重定向>
#define in 2 //输入重定向<
#define pipee 3 //管道|
#define outout 4 //输出重定向>>
void prompt(); //打印命令提示符
void get_param(char* param); //得到参数
int find(char* param); //查找命令
void cd(char *path); //内建cd
void anal(char* param, int* num, char arr[100][256]); //分析参数
void exec(int param_num, char para[100][256]); //执行命令
int main(int argc, char* argv[])
{
signal(SIGINT, SIG_IGN); //屏蔽ctrl+c
while(1)
{
int param_num = 0;
char *param = (char*) malloc (256);
char param_arr[100][256];
prompt();
get_param(param);
if((strcmp("exit", param) == 0 ) || (strcmp("logout", param) == 0))
break;
anal(param, ¶m_num, param_arr);
if(strcmp(param_arr[0],"cd") == 0)
{
cd(param_arr[1]);
continue;
}
exec(param_num, param_arr);
free(param);
}
return 0;
}
void prompt()
{
char hostname[