myod
单独开了篇博客,如下:
对Linux命令od -tc -tx1的C语言程序实现myod-优化版
两条指令
- man -k key1|grep key2|grep 2
“key1|grep key2|grep 2”都是关键字
- grep -nr XXX /usr/include
可用于查找宏 :“n”,显示行;“r”某目录下递归调用;“XXX”宏名
head&tail
需求分析
- 翻阅资料
通过
man 1 head
man 1 tail
可以查到相应的帮助文档
简而言之就是:head输出文件开始的部分,tail输出文件后面的部分
- 我实现的内容是:
head:默认输出前十行,加上“-数字h”则输出后h行,h超出文本总行数则输出全部文本。
tail:默认输出后十行,加上“-数字h”则输出后h行h超出文本总行数则输出全部文本。
伪代码
- head
1.测试是否输入正确,错误则报错退出
2.分析输入数据。
默认状况下令输出行数为10,当对输出行数有了限制,将“-”后面的数字剥离出,用aoti()转化为整型,视作输出行数。
3.输出——用“(h<output_h)&&(h<num_h)”限制输出行数。
默认状况下令输出行数为10,文件不足10行时输出全部文本,对输出行数有限制时输出限制行数。
- tail
整体和head差不多,只是在限制输出时与head有所不同——顺序输出后面部分。
用“int h=num_h-output_h;”h是否大于0来使输出在合理范围内
产品代码
测试
然而我并不知道这个改怎么测试,所以做了测试截图
- head
原本指令的结果
我的myhead的结果
在同样环境下比对系统原有的指令,与其结果一致
- tail
原本指令的结果
我的mytail的结果
在同样环境下比对系统原有的指令,与其结果一致
出现过的问题
问题1:输出行数过多
解决: 通过添加一些代码找到了原因,即下面被注释掉的代码。因为当时忽略了字符转整型应该-48。
问题2:不知道怎么判定命令行输入的是默认还是限制行数
解决: 通过判定argv[2][0]是否是“-”来判定是否限制行数
问题3:输出行数错误或无输出
- 解决: 上面对output_h的赋值有问题,当想输出不止个位数的行数,则只会输出前一位。所以我又做了一个myAtoi()把除了“-”的部分转化为整型。
第十章
- 问题:出现了一个头文件<csapp.h>,无法找到。
- 解决:经查资料后得知,csapp.h和csapp.c都是本书作者编的,导入即可。
参考链接为: 在Ubuntu下使用 csapp.h 和 csapp.c
由于它的对源文件的链接已打不开,找了同学要了一份,链接如下
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 16篇 | 400小时 | |
第一周 | 9/9 | 1/1 | 19/19 | 熟练下载安装技能,锻炼解决问题能力 |
第2周 | 380/389 | 2/3 | 26/45 | 1、7章 |
第3,4周 | 1270/1659 | 3/6 | 42 | 2、10章 |