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. [BZOJ 1924][Sdoi2010]所驼门王的宝藏

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1285  Solved: 574[Submit][Sta ...

  2. [Vijos 1768] 顺序对的值

    顺序对的值 描述 给定一个序列a,a中任意两个元素都不等.如果i<j,且a[i]<a[j],则我们称a[i],a[j]为一个顺序对,这个顺序对的值是指a[i+1],a[i+2]…….a[j ...

  3. JavaScript的事件对象_实现拖拽

    实现拖拽一个元素 拖拽的流程: 当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown 当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove 当鼠标松开时,被拖拽元素固定在当前位置 onm ...

  4. POJ3041 Asteroids(匈牙利算法)

    嘟嘟嘟 虽然我已经会网络流了,但是还是学了一个匈牙利算法. --就跟我会线段树,但还是学了树状数组一样. 其实匈牙利算法挺暴力的.简单来说就是先贪心匹配,然后如果左部点\(i\)匹配不上了,就尝试更改 ...

  5. vue2.* 绑定属性 绑定Class 绑定style 03

    <template> <div id="app"> <!-- 绑定属性 --> <div v-bind:title="title ...

  6. 【JavaScript】富文本编辑器

    这是js写的富文本编辑器,还存在一些bug,但基本功能已经实现,通过这个练习,巩固了js富文本编辑方面的知识,里面包含颜色选择器.全屏.表情.上传图片等功能,每个功能实际对应的就是一个小插件啦 部分程 ...

  7. 服务器监控zabbix

    nagios服务器安装:http://www.jb51.net/article/79496.htm默认端口12489 nagios +ndo2db+mysqlhttps://www.cnblogs.c ...

  8. JOB SERVER 负载均衡

    JOB SERVER 负载均衡 一.体系结构 1.job server group job server group 是由一个或者多个job server 组成的,做为一个整体对外提供服务,在内部实现 ...

  9. thinkpad T61 Fn功能键的完整说明及有关问题解决

    FN键的作用Fn 键是一个组合键,它自己本身没有用,需要和其他功能键组合起来以迅速改变操作特征,它可以组合的键在键盘上都用蓝色标注,具体作用为: Fn+F2:锁定计算机显示器.要再次打开计算机显示器, ...

  10. 由使用request-promise-native想到的异步处理方法

    由使用request-promise-native想到的异步处理方法 问题场景 因为js语言的特性,使用node开发程序的时候经常会遇到异步处理的问题.对于之前专长App开发的我来说,会纠结node中 ...