模拟实现shell,使它支持重定向功能

本文介绍了如何模拟一个简单的Shell,重点在于实现输出重定向功能。通过创建子进程,利用fork()系统调用,当检测到命令中有重定向符号'>'时,关闭标准输出(文件描述符1),然后打开指定文件进行写入。代码中使用execvp()执行命令,并处理用户输入的命令行参数。
摘要由CSDN通过智能技术生成

我们都知道用户是通过操作系统来对我们的硬件或者软件进行操作的,但是我们平时在使用计算机的时候并没有直接与操作系统进行交流。而在linux下我们通常通过终端输入命令,但是你有没有想过为什么我们在终端输入命令,操作系统就能认识呢?这中间存在一个命令行解释器shell,也就是所谓的外壳程序,来对我们输入的命令进行解释,调用相关的系统调用接口,从而实现各种操作。在这里我们就来模拟一个shell。

要模拟shell,我们首先得知道shell的工作原理:在我们打开终端的同时,我们也就将shell这个进程加载到内存中了,而对于我们输入的每一条命令,它也就是一个个可执行程序,也就是我们的shell这个进程通过fork()这个系统调用生成的子进程,shell这个进程本身并不会执行我们的命令功能,而是让它的子进程去执行对应操作,而它自己则是等待子进程返回,来回收子进程的资源。

要模拟实现shell,必然要和shell的功尽量贴切,而对于shell有一项功能需要注意,就是输出重定向。

对于我们的输出重定向,无非就是对于我们的输出在显示器文件上的东西重新定位到我们的文件中,所以这里只要对于文件描述符“1”进行关闭,而之后打开我们的文件即可(文件描述符1------stdout(原本时输出到显示器文件))

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值