2017-2018-1 20155239学号 《信息安全系统设计基础》课堂测试补做+第四周学习总结
2017-10-15 23:39
1201 查看
2017-2018-1 学号 《信息安全系统设计基础》课堂测试补做+第四周学习总结
课堂实践
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tcXXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
不要把代码都写入main函数中
要分模块,不要把代码都写入一个.c中提交测试代码和运行结果截图,提交调试过程截图,要全屏,包含自己的学号信息
课上上传代码到码云
include<stdio.h> include<unistd.h> void myod(int fd,int n1,int n2,int n3,int n4) { char ch,line[16]; int i; int a=0; int j=0; while(read(fd,&ch,1)!=0){ line[j%16]=ch; if((j+1)%16==0){ printf("%07o ",16*a); a++; if(n1){for(i=0;i<16;i++) { if(line[i]=='\n') {printf("%5s","\\n");continue;} if(line[i]=='\t') {printf("%5s","\\t");continue;} putchar(line[i]); putchar(' '); putchar(' '); putchar(' '); putchar(' '); } putchar('\n');} if(n2){printf(" ");for(i=0;i<16;i++) { if(line[i]=='\n') {printf("0%-4x",'\n');continue;} if(line[i]=='\t') {printf("0%-4x",'\t');continue;} printf("%-5x",line[i]); } putchar('\n'); } if(n3){printf(" ");for(i=0;i<16;i++) { if(line[i]=='\n') {printf("%-5d",'\n');continue;} if(line[i]=='\t') {printf("%-5d",'\t');continue;} printf("%-5d",line[i]); } putchar('\n'); } if(n4){printf(" ");for(i=0;i<16;i++) { if(line[i]=='\n') {printf("%-5o",'\n');continue;} if(line[i]=='\t') {printf("%-5o",'\t');continue;} printf("%-5o",line[i]); } putchar('\n'); } } j++; } }
od的功能(参考Linux od命令详细介绍及用法实例):
od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
选项-t:指定输出格式,格式包括a、c、d、f、o、u和x。
od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)截图如下:
代码链接
man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
grep -nr XXX /usr/include :查找宏定义,类型定义
教材学习内容总结
od命令
od命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。这些数据记录存放在一个文件中,如果想查看下这个数据,这时候od命令就派上用场了。在我看来,od命令主要用来格式化输出文件数据,即对文件中的数据进行无二义性的解释。不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
-a:此参数的效果和同时指定“-ta”参数相同;
-A:<字码基数>:选择以何种基数计算字码;
-b:此参数的效果和同时指定“-toC”参数相同;
-c:此参数的效果和同时指定“-tC”参数相同;
-d:此参数的效果和同时指定“-tu2”参数相同;
-f:此参数的效果和同时指定“-tfF”参数相同;
-h:此参数的效果和同时指定“-tx2”参数相同;
-i:此参数的效果和同时指定“-td2”参数相同;
-j<字符数目>或--skip-bytes=<字符数目>:略过设置的字符数目;
-l:此参数的效果和同时指定“-td4”参数相同;
-N<字符数目>或--read-bytes=<字符数目>:到设置的字符树目为止;
-o:此参数的效果和同时指定“-to2”参数相同;
-s<字符串字符数>或--strings=<字符串字符数>:只显示符合指定的字符数目的字符串;
-t<输出格式>或--format=<输出格式>:设置输出格式;
-v或--output-duplicates:输出时不省略重复的数据;
-w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数;
-x:此参数的效果和同时指定“-h”参数相同;
--help:在线帮助;
--version:显示版本信息。
来自: http://man.linuxde.net/od
完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写(3分)
head命令就是对文件打印代码,默认是从头开始打印前10行 ,也可以自定义打印
head -n 文件名
tail命令就是对文件打印代码,默认是从头开始打印后10行 ,也可以自定义打印ail -n 文件名表示打印这个文件n行
伪代码:
myhead: myHead 要打开的文件 { 读入字符 if(不是换行符) 输出字符; else 行数加1; if(读入10行) 跳出循环;关闭文件 }
mytail
mytail 要打开的文件 { 读入所有字符,行数 if(不是换行符) 从最后一行输出字符; else 行数减11; if(读入10行) 跳出循环;关闭文件
}
产品代码:
myhead: #include"tou.h" void main (int argc,char *argv[]) { char ch[4000]; int a,j,i,x=0; int in=open(argv[1],O_RDONLY,0); while((a=read(in,ch,4000))!=0) { for(i=0;i<a;i++) { if(ch[i]!='\n') printf("%c",ch[i]); else { printf("\n"); x++;} if(x==11) break; } } close(in); }
mytail:
#include"tou.h" void main (int argc,char *argv[]) { char ch[4000]; int a,i,j=0,x=0,line=0; int in=open(argv[1],O_RDONLY,0); while((a=read(in,ch,4000))!=0) { for(i=0;i<a;i++) { if(ch[i]=='\n') line++; else(j++); } } while((a=read(in,ch,4000))!=0) { for(i=j;i>0,x<11;i--) { if(ch[i]!='\n') printf("%c",ch[i]); else { printf("\n"); x++ ;} if(x==11) break; } close(in); }
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )问题1:XXXXXX
问题1解决方案:XXXXXX
问题2:XXXXXX
问题2解决方案:XXXXXX
...
代码调试中的问题和解决过程
问题1:XXXXXX问题1解决方案:XXXXXX
问题2:XXXXXX
问题2解决方案:XXXXXX
...
代码托管
(statistics.sh脚本的运行结果截图)上周考试错题总结
错题1及原因,理解情况错题2及原因,理解情况
...
结对及互评
点评模板:
博客中值得学习的或问题:xxx
xxx
...
代码中值得学习的或问题:
xxx
xxx
...
其他
本周结对学习情况
- [结对同学学号1](博客链接) - 结对照片 - 结对学习内容 - XXXX - XXXX - ...
其他(感悟、思考等,可选)
xxxxxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
计划学习时间:XX小时
实际学习时间:XX小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料
《深入理解计算机系统V3》学习指导...
相关文章推荐
- 2017-2018-1 20155304 《信息安全系统设计基础》第四周学习总结
- 20155325 2017-2018-1 《 信息安全系统设计基础》第四周学习总结
- 2017-2018-1 20155338 《信息安全系统设计基础》 第四周学习总结
- 20155334 2017-2018-1《信息安全系统设计基础》第四周学习总结
- 2017-2018-1 学号20155209 《信息安全系统设计基础》第十五周学习总结
- 2017-2018-1 20155327 《信息安全系统设计基础》课堂测试&课下作业
- 2017-2018-1 20155335《信息安全系统设计基础》第十一周学习总结
- 2017-2018-1 20155233《信息安全系统设计基础》第1周学习总结
- 20155322 2017-2018-1《信息安全系统设计》第四周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第11周学习总结
- 2017-2018-1 20155234第一周《信息安全系统设计基础》学习总结
- 2017-2018-1 20155230《信息安全系统设计基础》第十三周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第8周学习总结
- 20155334 2017-2018-1《信息安全系统设计基础》第三周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第6周学习总结
- 2017-2018-1 20155207 《信息安全系统设计基础》6周学习总结
- 2017-2018-1 20155338 《信息安全系统设计基础》 第三周学习总结
- 2017-2018-1 20155230《信息安全系统设计基础》第十一周学习总结
- 2017-2018-1 20155333 《信息安全系统设计基础》课堂测试