linux下实现简单my_shell

1.功能

1.实现 管道( | )
2.实现 输入输出重定向(<> >>)
3.实现 后台运行( &)
4.实现 内建命令(cd )
5.屏蔽一些信号(如ctrl + c 不能终止)
6.通过设置环境变量 可以直接使用 (在任意地方都可以运行你的shell)

2.代码分析

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <pwd.h>
#include <dirent.h>
 
#define nomal 0 	//默认情况
#define out 1		//输出重定向>
#define in 2		//输入重定向<
#define pipee 3		//管道|
#define outout 4	//输出重定向>>

void prompt();											//打印命令提示符	
void get_param(char* param);							//得到参数
int find(char* param);									//查找命令
void cd(char *path);									//内建cd
void anal(char* param, int* num, char arr[100][256]);	//分析参数
void exec(int param_num, char para[100][256]);			//执行命令
 
int main(int argc, char* argv[])
{
   

    signal(SIGINT, SIG_IGN);			//屏蔽ctrl+c

    while(1)
    {
   
        int param_num = 0;
		char *param = (char*) malloc (256);
        char param_arr[100][256];
        
		prompt();
        get_param(param);

        if((strcmp("exit", param) == 0 ) || (strcmp("logout", param) == 0))
            break;

        anal(param, &param_num, param_arr);

        if(strcmp(param_arr[0],"cd") == 0)
        {
   
            cd(param_arr[1]);
            continue;
        }

        exec(param_num, param_arr);
        
        free(param);
    }
    return 0;
}

void prompt()
{
   
	char hostname[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值