2017-2018-1 20155313 《信息安全系统设计基础》 Myod


Myod要求

1.复习c文件处理内容

2.编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

3.main与其他分开,制作静态库和动态库

4.编写Makefile

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

6.在博客园发表一篇博客,重点写遇到的问题和解决过程


解决过程

1.Linux环境下c语言的处理我们目前使用的是vim编辑器,vim编辑器的下载安装与调试在第一周的博客已经学习。我们通过使用vim编辑器对c语言程序及逆行编译,生成不同类型的文件,实现不同的功能,具体代码在第一周的博客中有进行整理。

除了vim以外,我们还使用了gdb进行断点调试,这些也在第二周的补交博客中进行了详细说明。

总而言之,之前在windows系统上无论使用code blocks还是vs++,我们以前学过的很多的功能在Linux上几乎都能实现,因此在课下也需要更多地去研究与学习。


2.首先一开始我对题目是不理解的,然后我想起来去年娄老师在java课上好像对我们提出了同样的要求,于是我们参考了去年同学写的博客,对od功能有了进一步的理解。

功能说明:输出文件内容。

语  法:od [-abcdfhilovx][-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>][--help][--version][文件...]

补充说明: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 显示版本信息。

在初步理解了od的功能以后我也理解了这道题目的含义,od是linux内部带的一个函数,可以输出文件内容,其他的参数可以选择输出的类型、内容等。现在我们需要编写一个c语言程序,并且在linux终端里使用myod test的代码来实现od同样的功能。

以下是我使用od指令与自己编写的myod程序对test文本文件进行显示16进制ASII值的操作。

除此以外,我还通过指令查找到了linux系统中od的源代码,在除了这次进行的基础myod变成以外,还可以通过学习源代码对myod进一步地加工,使得更加完善。本次习题只是要求输出16进制的:ASCII数,但是我同样可以选择输入不同指令输出其他类型的数,比如8进制、10进制等等输出形式。

我将od的源代码放入一个博客中分享给需要看的同学们。

od源代码


3.因为本次myod编写,我使用了一个函数就完成了该功能,所以没有使用静态库与动态库。对于静态库与动态库的使用,我在第二周的补交博客中详细完成了该内容,使用了娄老师给的mymath代码完成。


4.我对于Makefile的理解是一种动作,我们事先对这种动作进行定义,定义它编译的内容、顺序等信息,然后再在Linux终端里输入make指令执行该动作,即实现“自动化编程”。

makefile 介绍

make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序。

首先,我们用一个示例来说明makefile的书写规则。以便给大家一个感性认识。这个示例来源于gnu的make使用手册,在这个示例中,我们的工程有8个c文件,和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:

1)如果这个工程没有编译过,那么我们的所有c文件都要编译并被链接。

2)如果这个工程的某几个c文件被修改,那么我们只编译被修改的c文件,并链接目标程序。

3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的c文件,并链接目标程序。

只要我们的makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

在接触Makefile的时候,我选择了娄老师在实验楼里推荐的教程进行了学习,那个教程比较简单,也轻松地完成了要求地编译内容,但是当涉及到更深程度,比如myod的程序编译以及库的制作时,就需要更加详细的资料进行学习。

以下是我使用make指令调用Makefile实现编译的截图。


5.截图如上所示。


6.本周发表博客两篇,一篇是主要是将课堂上没完成的问题进行总结与解决(下面有链接),另一篇则是本篇博客,主要是为了完成课后布置的作业,希望老师能对我的学习完成情况进行指导。

2017-2018-1 20155313 《信息安全系统设计基础》第二周课堂实验


学习中遇到的问题域解决方案

1.在编写myod的过程中如何读入文件?

解决方案:

一个c语言读写文件程序:

#include "stdio.h"
#include <stdlib.h>
main()
{
FILE *fp1;//定义文件流指针,用于打开读取的文件
FILE *fp2;//定义文件流指针,用于打开写操作的文件
char text[1024];//定义一个字符串数组,用于存储读取的字符
fp1 = fopen("d:\\a.txt","r");//只读方式打开文件a.txt
fp2 = fopen("d:\\b.txt","w");//写方式打开文件a.txt
while(fgets(text,1024,fp1)!=NULL)//逐行读取fp1所指向文件中的内容到text中
{
puts(text);//输出到屏幕
fputs(text,fp2);//将内容写到fp2所指向文件中
}
fclose(fp1);//关闭文件a.txt,有打开就要有关闭
fclose(fp2);//关闭文件b.txt
}

参考资料

20170531动手实践MyOD——20155312

跟我一起写Makefile:MakeFile介绍

2017-2018-1 20155313 《信息安全系统设计基础》 Myod的更多相关文章

  1. 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交

    2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...

  2. 20155326 2017-2018-1 《信息安全系统设计基础》第2周学习及课堂总结myod

    20155326 2017-2018-1 <信息安全系统设计基础>第1次学习及课堂总结myod 虚拟机之前出了一些问题,然后我重新弄了一个新的虚拟机. 先在虚拟机里面安装了git. 安完以 ...

  3. 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

    2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...

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

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

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

    2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...

  6. 2017-2018-1 20155318 《信息安全系统设计基础》第2周课堂实践、makefile、以及myod

    2017-2018-1 20155318 <信息安全系统设计基础>第2周课堂实践.makefile.以及myod 测试3-gdb测试 用gcc -g编译vi输入的代码 在main函数中设置 ...

  7. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

  8. 20155308&20155316 2017-2018-1 《信息安全系统设计基础》实验一

    20155308&20155316 2017-2018-1 <信息安全系统设计基础>实验一 此次实验我和黄月同学一起做了1.2.3.5项,第4项在实验课上做完了,但是没有按时提交. ...

  9. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

随机推荐

  1. mysql常用语句备忘

    1.连接本地数据库 mysql -h localhost -u root -p123 2.连接远程数据库 mysql -h 192.168.0.201 -P 3306 -u root -p123 3. ...

  2. Java设计模式----初识适配器模式

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. 【Kendo UI系列开发使用笔记】01-简单介绍

    ps:接触telerik出品的kendo ui系列已经快有一年了,使用过程中也在不断踩坑填坑.这套UI用起来还是非常爽的,尤其asp.net mvc版的配合lambda表达式来配置参数非常流畅.这次对 ...

  4. Oracle EBS AR 客户取数SQL

    SELECT acct.cust_account_id, acct.party_id, acct.account_number, party.party_name, lkp1.meaning part ...

  5. Oracle EBS 更改物料说明后,在MTL_SYSTEM_ITEMS_B表中无变化

    需要再中文和英文环境同时修改: 程序里,可以通过初始session语言环境来解决.

  6. Oracle EBS AR 更新客户

    DECLARE    l_return_status );    l_msg_count     NUMBER;    l_msg_data      );    l_rec_type      hz ...

  7. mysqlcilent的安装

    这软件包是贼的气 首先是windows的安装上你必须要指定版本,linux的安装你就不需要指定版本了 windos上的指定安装必须要   一.下载包的时候需要指定版本, 比如python2的和mysq ...

  8. 使用CADisplayLink写秒表

    使用CADisplayLink写秒表 效果: 源码: StopWatch.h 与 StopWatch.m // // StopWatch.h // ShowTime // // Created by ...

  9. iOS7中UIView的animateKeyframesWithDuration方法讲解

    iOS7中UIView的animateKeyframesWithDuration方法讲解 在iOS7中,给UIView添加了一个方法用来直接使用关键帧动画而不用借助CoreAnimation来实现,那 ...

  10. [翻译] InstagramPhotoPicker

    InstagramPhotoPicker Present Image Picker like Instagram. 展示图片选择器,像Instagram这款应用一样. Installation - 安 ...