ICS shell lab总结
lab简介
本lab的目的是实现一个支持基本shell功能和I/O重定向功能但不支持管道功能的tsh(tiny shell),本lab中基本框架已经拉好,只要实现以下功能即可。
eval():对外壳命令行求值
handler():分别对SIGINT,SIGCHLD,SIGTSTP处理。
本lab只需要通过24个trace测试点即可
eval()实现思路
eval()在CSAPP课本里面有一个naive版本,基本包括了主要功能框架。但是注意课本里和lab里面用的数据结构不完全一样,而且lab里面没有分割各个函数模块。
而且lab中要做好I/O处理和信号避免冒险的处理工作。
既然是总结,我就不重复代码了,我写一下伪代码,伪代码很紧凑,会意即可。
void eval(tok) {
bg=parseline(buf,argv);//需要一个buf,因为praseline会改变cmdline
deal_io();//处理I/O
block_sig();//堵塞信号以防冒险
if (builtin_cmd==true) {
i