2017-2018-1 20155306 《信息安全系统设计基础》第四周学习总结
课上实践--myod-系统调用版本【已完成】
代码链接
运行截图如下:截图内有部分关键代码
•要求:
1.参考教材第十章内容
2.用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc
XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
3.不要把代码都写入main函数中
4.要分模块,不要把代码都写入一个.c中
5.提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息
6.课上上传代码到码云
head/tail的使用
head/tail是linux中常见的文本选取命令,用以选取头部/尾部的若干行文本。
- 使用命令查看帮助文档如下:
man -k head | grep 1
man -k tail | grep 1
- 通过man命令看head,tail的具体详细使用方法,以及之后编写产品代码需要read函数的头文件等信息都可以在这里找到:
man head
man tail
man read
- 直接使用命令进行验证,head输出文档前十行,tail输出文档的后十行:
命令格式:
通过上述帮助文档,可以得出不加选项的情况下默认输出头部的10行文本。使用-n选项搭配数字可以指定需要输出的文本行数量,其中若number为负数时表示输出前面所有的行,但不包括最后的|number|行。
head -n number filename
和head基本相似,但是表示输出末尾的文本。另外一个区别是number如果带+号表示输出末尾的所有文本,但不包括前number-1行。
tail -n number filename
编程实现:
head伪代码:
{
打开文件;
以循环的形式读入文件;
读入换行符,则计数器加一;
读入10行则停止输出;
关闭文件;
程序结束。
}
head产品代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int f,i=0;
char ch;
f=open(argv[1],O_RDONLY,0);
if(f==-1)
{
printf("error!");
}
while(read(f,&ch,1)!=0)
{
printf("%c",ch);
if(ch=='
') i++;
if(i==10) break;
}
close(f);
exit(0);
}
head运行截图:
tail伪代码:
{
打开文件;
以循环的形式读入文件;
计算文件总行数;
读入换行符,则计数器加一;
从后向前,读入10行则停止输出;
关闭文件;
程序结束。
}
tail产品代码:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int f,f2,i=0,j;
char ch;
int len;
f=open(argv[1],O_RDONLY,0);
if(f==-1)
{
printf("error!");
exit(0);
}
while(read(f,&ch,1)!=0)
{
// printf("%c",ch);
if(ch=='
') i++;
}
close(f);
f2=open(argv[1],O_RDONLY,0);
while(read(f,&ch,1)!=0)
{
if(ch=='
') j++;
if(j>=i-10)
printf("%c",ch);
}
close(f2);
exit(0);
}
tail运行截图:
代码链接
代码中遇到的问题:
-
问题一:
在编译head.c时遇到如下问题提示:
-
解决:通过百度,该英文提示的意思是:括号不匹配。重新 vi head.c 发现自己少了一个大括号。
-
问题二:
在运行tail.c时,发现自己明明在代码中进行了行数控制,但输出的却还是整个文档的内容。
-
解决:我从头到尾检查了代码,感觉没有错误。然后我把行数控制修改到5,结果输出的还是整个文档,这说明行数控制不起效果。后来恍然大悟计数是一个文件,后面输出应该是另外是另外的文件。重新读取新一个文件,再进行换行符计数,输出文档。
其他(感悟、思考等,可选)
有一点关于代码的感悟,在编代码时,我正在苦恼于怎么计数,找到的计数函数总是出错。我的搭档提醒我可以先整个文档读一遍来计数,然后再读取输出。我觉得这个方法很好,而且工作量减小,同一段代码多次使用,所以我感觉一起学习感觉很好,省时高效,互相帮助!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 1/2 | 10/15 | 第一章 |
第三周 | 130/210 | 1/2 | 21/36 | 第二章 |
第四周 | 70/ 280 | 1/3 | 10/46 | 第十章 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:15小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)