操作系统 实现简单shell程序 sh2.c

本文档介绍了如何在sh2.c中实现一个简单的Shell程序,该程序在第1版基础上增加了重定向输入和输出的功能。主要内容包括结构体定义、SkipSpace、parse_command、mysys和redirect等函数的实现,以及main函数的描述。程序要求重定向输入需在重定向输出之前,同时解析字符串以处理命令和文件重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值