myshell
- 支持cd命令
- 输入输出重定向
- 输出追加重定向
- 支持可执行程序后台运行
头文件
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<dirent.h>
#define normal 0 //普通命令
#define out_readirect 1 //输出重定向
#define in_readdirect 2 //输入重定向
#define have_pipe 3 //命令中有管道
#define out_add_readirect 4 //输出追加重定向
void print_prompt();
void get_input(char *);
void explain_input(char*, int*, char (*)[256]);
void do_cmd(int, char (*)[256]);
int find_exeProgram_In_command(char *);
char* msg;
打印提示符的函数(可以假乱真)
#include "myshell.h"
char* cutOut(char str[], const char* delim, char** catalog)
{
char* result = NULL;
result = strtok( str, delim );
char msg[100][30] = {};
int i =0;
for(i=0; result != NULL; i++)
{
strcpy(msg[i], result);
result = strtok( NULL, delim );
}
*catalog = msg[i-1];
return *catalog;
}
void print_prompt()
{
msg = (char *)malloc(100);
getcwd(msg, 100);
char delim[] = "/";
char* catalog;
cutOut(msg, delim, &catalog);
printf("[rjm_clone@localhost %s]$ ", catalog);
free(msg);
}
获得命令的函数
#include "myshell.h"
void get_input(char* buf)
{
int len = 0;
int ch;
ch = getchar();
while(len < 256 && ch != '\n')
{
buf[len++] = ch;
ch = getchar();
}
if(len == 256)
{
printf("command is too long\n");
exit(-1);
}
buf[len] = '\n';
len++;
buf[len] = '\0';
}
解析命令的函数
//解析buf中的命令,将结果存入arglist中,命令以回车符号\n结束
void explain_input(char* buf, int* argcount, char (*arglist)[256])
{
char *p = buf;
char *q = buf;
int number = 0;
int i;
while(1)
{
if(p[0] == '\n')