1644_MIT 6.828 shell例程中parseexec函数的实现分析
创始人
2025-05-30 20:08:12
0

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         继续看这个shell例程的分析,现在从最初的有点茫然到现在基本能够看清楚数据处理的流程了。这一次,分析一下parseexec函数的实现。

         这里前面两行代码其实就是一个等价转换,不处理都是可以的。而接下来的重定向处理,则是判断命令是否有重定向的动作,并且进行了命令的转换。

1. while的条件中,peek只是修剪空白不会改变其他的信息。这里通过peek来修剪空白的同时判断了是否有管道命令。如果没有管道命令,下面才会执行循环体。从另一个角度思考,其实管道命令会决定命令处理的一个信息区间段。

2. 在第一次gettoken执行的时候,如果发现字符串已经处理完了,那么直接退出。

3. 如果没有到字符串的最后,那么接下来应该会取出来了一段参数。因为进入循环之前已经重定向处理了,因此这里已经没了重定向符号。而这个逻辑跳过了管道符号,又执行了一次gettoken的调用,会把接下来的一段参数字符串取出来。因此,这里算是做了一个防御式的编程判断。

4. 在第3步的处理中,参数的字符串范围已经取出来了,在接下来的参数处理中通过mkcopy函数进行了字符串内容的复刻。这样,相应的参数在堆栈中新开辟的内存空间中存储。

5. 参数的个数有一定的数目现在,在这里数目限制为10个。

6. 由于命令是可以级联的,而参数本身也可能存在多个。因此,循环结构的存在是需要解决这样的问题的。在结束之后,进行了新的重定向的处理。

7. 当所有的参数全都解析完成之后,最后增加了一个参数0作为处理的结束信息。这样的处理类似于字符串的结束方式。

         这样,这个函数的分析就基本结束了。刚刚回退了一下,看了下之前没有解析完的代码设计发现还是少一些其他的代码解析。后面需要补充完才能够完成回溯的解读,这样,等待以后开启新的代码分析了。

 

上一篇:蓝桥复习2

下一篇:k8s 1.18.20版本部署

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...