2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客

课上myod练习

1 参考教材第十章内容

2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名

  1. 不要把代码都写入main函数中

  2. 要分模块,不要把代码都写入一个.c中

5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

在第一次尝试在我上次编写myod的基础上,通过调用FILE*fp指针到函数

hexdacimal.c

output.c

ascii.c

中但是出现了段错误的提示后,上网搜索后,发现是野指针,就是段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。所以不采用用FILE*fp作为参数传参

后面又改为将number作为总数和将数组传递到函数中去实现,又出现了段错误的提示。

通过刚才给出的链接中,进行调试后,又将代码进行了改进后,运行结果如下:



无法打开文件,也就是文件打开失败,在读取时出现了问题,于是又做了进一步的改进:



终于运行成功。代码如下:



在命令行输入文件名,即可显示出文件的内容。

掌握两个重要命令:

man -k key1 | grep key2| grep 2

根据关键字检索系统调用

grep -nr XXX /usr/include

:查找宏定义,类型定义

man命令,

man3是查找函数

man2是查找系统调用

man1是查找命令。

在输入如下命令就是查找从文件读取的系统调用有哪些。

man -k read | grep 2  | grep file

然后再输入

man 2 read

命令就能查看read的帮助

grep -nr "struct utmp" /usr/include

查找struct utmp在哪个头文件中定义linux头文件都在此目录下)。

学习head,tail的使用

通过使用命令

man head

查看head的帮助文档。

  • head命令默认显示头部的前N行
  • -q 隐藏文件名
  • -v 显示文件名
  • -c<字节> 显示字节数
  • -n<行数> 显示的行数

通过命令

head -3 1234.txt

显示文件前三行:

通过命令

head -c 7 1234.txt

显示文件前n个字节

通过命令

head -c -4 1234.txt

显示文件的除了最后n个字节以外的内容

通过命令

head -n -2 1234.txt

输出文件除了最后n行的全部内容:

  • 与head命令相反,tail命令是用来查看具体文件后面几行的内容
  • 查看tail命令的API

  • -f 循环读取
  • -q 不显示处理信息
  • -v 显示详细的处理信息
  • -c<数目> 显示的字节数
  • -n<行数> 显示行数
  • –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
  • -q, –quiet, –silent 从不输出给出文件名的首部
  • -s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

查看文件后面几行的内容:

通过命令

tail -f 1234.txt

循环查看文件内容,用Ctrl+c来终止。

通过命令

tail -n +2 1234.txt

从第2行开始显示文件:

  • 编写伪代码
  • head和tail命令+文件名 默认输出10行内容。
main函数中命令行传入参数命令
调用head函数
将数组data及数组长度传入head函数中
利用循环中嵌套if条件
for( ;小于总长且小于10行; )
if(判断是否读取到的为换行符)
{
若为换行符
行数++且打印换行符
若不是
则打印字符
}

运行结果:(显示前10行内容)

tail伪代码:

main函数中命令行传入参数命令
调用tail函数
将数组data及数组长度传入head函数中
利用循环中嵌套if条件
for{(从后开始;大于0且小于10行;循环变量递减 )
if(判断是否读取到的为换行符)
{
若为换行符
行数++}
} 若不是跳出循环
for(等于行数;小于等于len;循环变量增加)
打印字符
}

运行结果(显示后10行):

head和tail代码的码云链接

第四周教材学习内容总结

本周学习第十章和附录A:

  • Unix I/O(打开文件,改变当前的文件位置,读写文件,关闭文件)
  • RIO包读写

健壮的包,会自动为你处理之前所述的不足值。

1.无缓冲的输入输出函数(调用rio_readn和writen函数)

2.带缓冲的输入函数(调用一个包装函数rio_readlineb)

  • linux内核用三个相关的数据结构来表示打开的文件

    1.描述符表

    2.文件表

    3.v-node表

  • 每个进程有单独的描述符表,但所有进程共享同一打开文件表和v-node表

  • 标准I/O

附录A:

  • unix中错误处理

1.Unix风格

2.Posix风格

3.GAI风格

  • 错误处理包装函数

教材学习中的问题和解决过程

  • 问题1:系统i/o重定向如何具体实现?

  • 解决:

    在网上查阅资料时,看到相关资料非常的详细:

    I/O重定向的原理和实现

  • 问题2:课本练习题代码10.1中运行结果的值为什么是3?

  • 解决:

    因为生命周期开始时0、1、2被占用,所以以后从3开始,所以对open的返回描述符为3。

代码调试中的问题和解决过程

  • 问题1:在编写如下代码时,遇到了问题:



    提示出现没有那个文件或目录。

  • 问题1解决方案:

    在上网查询后,发现因为没有导入csapp.h和csapp.c这两个头文件的原因。结果如下:



    首先在网上输入下载头文件地址,找到两个头文件,并把内容分别复制下来。在当前目录下输入命令,

vi csapp.c
vi csapp.h

并把代码粘贴进去。

在用命令sudo进行移动的操作,移动到/usr/include中。

在将csapp.h中的内容做一部分修改增加代码,然后用命令

gcc ***.c -o **** -lpthread

进行编译,然后再运行,问题得以解决。

  • 问题2:在运行课本p633页代码时,出现错误:地址错误的问题

  • 问题2解决方案:

    在网上搜索后暂未解决。

代码托管

上周考试错题总结

结对及互评

点评模板:

暂无

本周结对学习情况

- [20155215](http://www.cnblogs.com/xuanyan/p/7673735.html)

- 结对学习内容
- 共同学习课本第十章和附录A内容
- 分析课本中代码遇到的问题

思考

这周的学习内容主要是对文件的处理操作。教材中有很多的代码,通过自己运行加深了理解。而且在遇到问题后能通过自己查询然后解决会记忆更加深刻,也对以后的学习奠定了基础。

  • 运行课本p636页课后习题:



    运行结果:

从而更加说明了通过对代码的编译运行对代码的理解又加深了印象,也能得到正确的答案。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第四周 12/12 1/1 20/20
第五周 271/283 1/2 15/15
第6周 276/283 2/3 18/18

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。

耗时估计的公式

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

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

  • 计划学习时间:12小时

  • 实际学习时间:18小时

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

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

参考资料

2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客的更多相关文章

  1. 20135328信息安全系统设计基础第一周学习总结(Linux应用)

    学习计时:共xxx小时 读书: 代码: 作业: 博客: 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用Linux中用户管理命令/ ...

  2. 20135328信息安全系统设计基础第二周学习总结(vim、gcc、gdb)

    第三周学习笔记 学习计时:共8小时 读书:1 代码:5 作业:1 博客:7 一.学习目标 熟悉Linux系统下的开发环境 熟悉vi的基本操作 熟悉gcc编译器的基本原理 熟练使用gcc编译器的常用选项 ...

  3. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  4. LINUX信息安全系统设计基础第一周学习总结

     Linux系统简介 一.实验内容 了解 Linux 的历史,Linux 与 Windows 的区别等入门知识. 二.实验要求 阅读linux简介与历史 三.实验步骤 二.Linux 与 Window ...

  5. LINUX信息安全系统设计基础第二周学习总结

    1 Linux命令 2 man命令 1.Terminal(终端) Linux 系统还提供了一个叫做终端模拟器的程序(Terminal),下面几个比较常见的终端模拟器,例如 gnome-terminal ...

  6. 20145314郑凯杰《信息安全系统设计基础》GDB调试32位汇编堆栈分析

    20145314郑凯杰<信息安全系统设计基础>GDB调试32位汇编堆栈分析 本篇博客将对第五周博客中的GDB调试32位汇编堆栈进行分析 首先放上以前环境配置的图: 图1: 测试代码: #i ...

  7. 20155217 《信息安全系统设计基础》week16课堂测试

    20155217 <信息安全系统设计基础>week16课堂测试 在作业本上完成附图作业,要认真看题目要求并提交作业截图. 在set的过程中,我们需要将hour部分进行赋值,赋值我们采用&q ...

  8. 2017-2018-1 20155232 《信息安全系统设计基础》第十周课堂测试(ch06)补交

    # 2017-2018-1 20155232 <信息安全系统设计基础>第十周课堂测试(ch06)补交 上课时完成测试后在提交的时候,没有提交成功,进行补交. 1.下面代码中,对数组x填充后 ...

  9. 20145213《信息安全系统设计基础》实验一 Linux开发环境的配置

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名: 黄亚奇 祁玮 学号:20145213 20145222 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...

随机推荐

  1. 把所有的小图标一起做成雪碧图吧 请用gulp-css-spriter.

    用gulp-css-spriter很简单. 第一步: 在某个文件夹用shitf+鼠标右键 第二步: npm install gulp-css-spriter https://www.npmjs.com ...

  2. centos6.4 minimal 安装kvm

    操作系统是网易源下载的centos 64位的minimal安装包,很多工具都没有,像gcc make wget which where 等统统没有,好在有yum 这里为了简单起见直接用yum安装kvm ...

  3. java多线程--实现Runnable接口方式

    因为java类只能继承一个类可以实现多个接口的特性,所以一般情况下不推荐使用继承Thread类实现多线程,下面是实现Runnable接口方式的简单多线程代码 package text; /** * 多 ...

  4. BZOJ2599:[IOI2011]Race(点分治)

    Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000 Input 第一行 两个整数 n, k 第二 ...

  5. [Noip2007]Core树网的核

    嘟嘟嘟 首先求树的直径两次bfs即可,实际上bfs就是最短路,因为树上路径是唯一的,所以用任何一种遍历方法都行(spfa和dijkstra当然也可以). 可以证明,只要求出任意一条直径就行了,为什么呢 ...

  6. 一步步入门编写PHP扩展

    1.写在最前 随着互联网飞速发展,lamp架构的流行,php支持的扩展也越来越多,这样直接促进了php的发展. 但是php也有脚本语言不可避免的问题,性能比例如C等编译型语言相差甚多,所以在考虑性能问 ...

  7. Java之关于JSTL引入问题

    错误信息:Can not find the tag library descriptor for “http://java.sun.com/jstl/core”JSTL taglib需要jstl.ja ...

  8. Python自动化之Django中间件

    django中间件 Django请求生命周期 中间件中可以定义方法,分别是 process_request(self,request) process_view(self, request, call ...

  9. curl http code 0

    使用curl进行post请求后,接收status code ,结果返回的结果是0 ,但是请求返回的数据是正常的. 检查后发现是执行顺序问题: $response = [ 'statusCode' =& ...

  10. Tomcat中日志组件

    Tomcat日志组件 AccessLog接口 public interface AccessLog { public void log(Request request, Response respon ...