您的位置:首页 > 其它

2017-2018-1 20155306 《信息安全系统设计基础》第4周学习总结

2017-10-15 22:53 627 查看

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=='\n') 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=='\n') i++;

}
close(f);
f2=open(argv[1],O_RDONLY,0);
while(read(f,&ch,1)!=0)
{

if(ch=='\n') 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/201/210/15第一章
第三周130/2101/221/36第二章
第四周70/ 2801/310/46第十章
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

计划学习时间:15小时

实际学习时间:10小时

改进情况:

(有空多看看现代软件工程 课件

软件工程师能力自我评价表)

参考资料

深入理解计算机系统(第3版)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐