Linux内核实验(二):shell命令解释系统

一、引言

Shell命令解释程序中元字符的处理是shell中一个强大的功能,利用对各种字符的不同解释可以充分挖掘出内核的各种强大的潜能。例如利用“&”符号启动并发的后台进程,利用“<”、“>”符号启动I/O重定向,利用“|”启动管道读写等。同样也可以实现其他一些元字符的功能,如“*”通配符,“;”连接符等。

二、实验内容

问题A
实现一个能处理前后台运行命令的shell
问题B
实现一个带有管道功能的shell
问题C
实现一个能处理I/O重定向的shell
问题D
实现一个能在一行上处理多条命令的shell

三、实验代码

/*****************************************
*
* Shell命令解释系统
*
* Copyright: (C) 2018.4.14 by shaomingshan
*
* Compile: gcc -I/usr/include -lreadline -g -o main main.c
*
* Execute: ./main
*          ps aux | sort | uniq > aaa
*          cat aaa
*
*****************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <readline/readline.h>
#include <sys/stat.h>
#include <wait.h>

#define LS 1024
#define DELIM "<>;|"

int lineeof(char * str) {
    /* 判断命令是否完成输入 */
    int len = strlen(str);
    while (str[len-1] == 32) len--;
    if (str[len-1] == 92) {
        str[len-1] = '\0';
        return 0;
    }
    return 1;
}

void exec(char * cmd) {
    /* 执行命令 */
    char *eargv[16];
    int i = 0;
    eargv[i] = strtok(cmd, " ");
    while (eargv[i++] != NULL) {
        eargv[i] = strtok(NULL, " ");
    }
    eargv[i] = 0;
    execvp(eargv[0], eargv);
}

char * trim(char *str) {
    /* 去前后空白 */
    int l = 0;
    int r = 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值