操作系统实验二:shell 的简单实现

本文介绍了一个C语言实现的Linux内核Shell,功能包括解析命令行、环境变量搜索、执行命令、内置ls、mkdir等命令及历史命令查询。通过编译运行,可以体验到Ctrl+C触发的历史命令显示功能。
摘要由CSDN通过智能技术生成

题目: 编写一个C语言程序作为Linux内核的Shell命令行解释程序,实现以下功能: (1)解析用户提交的命令行;按照环境变量搜索目录系统;执行命令。 (2)提供ls、mkdir rmdir、pwd、ps等内部命令。 (3)提供历史查询功能。如用户按下Ctr1+C,信号处理器将输出最近的10个命令列表。

直接贴实验代码,各位读者慢慢研读,最好不求甚解,否则会陷入好多我们不了解的知识问题里,比如代码里的获取ctrl+c的信号函数
先在ubantu下用mkdir命令创建一个目录文件(保持良好文件整理习惯)
这里创建了名为subshell的目录文件

setup.h

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include "queue.h"

#define MAX_LINE 80
void setup(char *inputBuffer, char *args[], int *background);

setup.c

#include "setup.h"

void setup(char *inputBuffer, char *args[], int *background){
    int length;//命令的字符数目
    int i;//循环变量
    int start;//命令的第一个字符位置
    int ct;//下一个参数存入args[]的位置

    ct = 0;

    /**
    *读入命令行字符,存入inputBuffer
    */
    length = read(STDIN_FILENO, inputBuffer, MAX_LINE);
    start = -1;
    if(length == 0) exit(0);
    if(length < 0){
  //ctrl+c will read error, and return null
        args[0] = NULL;
        return;//输入ctrl+c时,会进入错误读取。从而退出setup函数,避免异常
    }

/*用户通过输入"rx" 可以运行之前10 个命令中的任何一个,其中"x" 为该命令的第一个字母。如果有个命令以"x" 开头,则执行最近的一个。同样,用户可以通过仅输入"r"来再次运行最近的命令*/
   if(inputBuffer[0]=='r'){
        char *str;
        if(inputBuffer[2]=='\n'||inputBuffer[2]=='\t'){
            if((str=g
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值