sh2.c: 实现shell程序,要求在第1版的基础上,添加如下功能
• 实现文件重定向
• $ echo hello >log
• $ cat log
• Hello
这还有一点点小问题,输入要求:重定向输入在重定向输出前面
在sh3.c把这个缺陷完善了
两个程序的字符串切割函数思路不太一样
实现思路
1.输入一行字符串
2.调用parse_command把字符串根据'>'、'<'和' '分割
分割后的字符串保存到struct command【】中
3.根据input和output判断是否有文件的重定向
- 如果没有,执行mysys()
- 如果有,创建子进程
- 先执行重定向redirect()
- 再执行mysys()
4.把结构体内容清空,进行下一次循环
if(Cmd->input[0] == '\0' && Cmd->output[0] == '\0')
mysys(Cmd);
else
{
int pid= fork();
if(pid == 0)
{
redirect(Cmd);
mysys(Cmd);
exit(0);
}
wait(NULL);
}
函数和结构体说明
结构体
#define MAX_LEN 100
#define MAX_ARGC 16
char buff[MAX_LEN];
struct command{
int argc;
char *argv[MAX_ARGC];
char input[MAX_LEN];
char output[MAX_LEN];
};
函数
void SkipSpace(char *str)
跳过空格,主要是通过输入里面的空格,好识别input和output文件
void SkipSpace(char *str)
{