SJTU->SE->ICS->LAB9 Tiny Shell

本文记录了作者从Windows 7升级到Windows 8.1遇到的问题,并分享了一个Shell项目的实现过程。该项目实现了基本的命令行解释器功能,包括内置命令处理、子进程管理和信号处理。
        实在是不想再继续看大雾了,这讲的都是啥。于是就作死地试着把win7换成了win8.1,问题是真多- -在写这个日志的时候,我的输入法每打一个字,整个chrome就会不响应几秒钟,我整个人都不好了。于是被逼在虚拟机里写,实在是逗。微软不是说这是一个很有诚意的东西么,难道chrome已经不能承受高大上的win8输入法了么fxxk!

       好吧,回到正题。这个lab一开始是不打算写了,找复旦软院的同学借了一份代码,本来是真的打算就这样交上去算了,后来想了想,不写很虚,期末考试万一跪了就GG了。于是又认认真真地做了这个lab。总体来说难度不是很大,比之前的malloc和processor要简单得多。

       测试出来的结果就是这样~


        shell,我理解就是类似于ubuntu的terminal的东西,ICS给的PDF上的解释是:shell是运行在代表用户程序的交互式命令行解释器。一个shell,重复操作打印的提示,等待标准输入上一命令行,然后执行一些动作,所指示的命令行的内容。
这个lab的要求是:如果是内置的命令,那么就直接执行,如果不是的话,那就fork一个子进程,然后在子进程中执行命令。其他一些琐碎的要求就不说了,接下来就说说我的做法吧。
        首先看看都需要改啥函数吧,eval函数用来判断输入的命令行,如果是内置的命令那就调用builtin_cmd,直接处理,如果不是的话,那就fork进程,在子进程里处理,在父进程里要把子进程加到jobs表里。这里比较需要注意的是要在fork前要把cld信号锁起来,主要是怕还没有把子进程加到jobs里,就调用childhandler,试图把还没加到jobs的进程删掉。
        builtin_cmd就是处理内置命令,没啥,do_fgbg也没啥,就是根据输入处理下就好,需要注意的是kill函数的进程要是原本的pid的负数,不知道为何要这样。waitfg要做的就是等,等到要等的进程不再是前台的进程。waitfg比较难,主要是bug多。。。。
接下来,就是几个handler了。childHandler也是不好写,是对于结束的子进程做回收处理(无论是怎么结束的)至于stp和int的处理,就是kill(-pid,SIGINT);就可以了,不是问题。
        至于代码,在这里,http://download.youkuaiyun.com/detail/u011450272/6725763
        之所以这么贵倒不是我想挣硬币- -解释已经在下载页面了。如果是我交的学弟学妹,那万万不要下载下来就交了,起码改改,因为我的代码都给一个小学弟了,你们要是被判cheating那可不能怪我0 0 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值