自己动手写一个简单的Shell之三:命令行解析

 

        前面我们写了一个简单的Shell,这个Shell能够接收用户的命令并运行命令。不过这个Shell有个不足就是用户输入命令的时候不能一次输入全部的命令,只能把命令和参数分开输入。这样子对用户极不友好,下面我们就来解决这个问题,方法就是添加命令行解析的功能。命令行解析功能说白了就是解析字符串,把字符串中包含的命令和参数分开,放入字符数组中,作为execlp系统调用的参数。为了实现这个功能,我们需要一个接受用户输入的命令行参数的函数,一个将命令行分解成参数数组的函数。下面是程序主函数:

 

下面就分别来解说这三个函数:
    1、next_cmd()函数从输入流中读入下一个命令,它调用malloc来分配内存以接受任意长度的命令行。碰到文件结束符,它返回NULL。
    2、splitline()函数将一个字符串分解为字符串数组,并返回这个数组。它调用malloc来分配内存以接受任意 个数参数的命令行。这个数组由NULL标记结束,是execute()函数的输入。
    3、execute()函数使用fork、execvp和wait来运行一个命令,返回命令的结束状态。
    下面是程序运行结果和源码:

点击看大图

点击此处下载ash.c (文件大小:4K)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值