20179209课后作业之od命令重写
一.问题描述:
1 复习c文件处理内容
2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
3. main与其他分开,制作静态库和动态库
4. 编写Makefile
二.分析:
1.实质就是od命令的重写再加动态库和静态库的制作。
2.一提到命令重写,我能想到的就是带参数的main函数,然后就是详细了解od -tx -tc XXX这条命令实现的功能。
三.实验环境
4.3.0-kali1-amd64
四.详细过程
1.od -tx -tc XXX命令功能分析

上面这个图非常值得认真看一下,两条命令od -tc -tx testfile与od -tc -tx1 testfile的不同。man od之后得到这样的结论,-x后面不加数字默认一次输出两个字节的十六进制,相当于-x2。然而这里却一次输出了四个字节,而且是倒序!(对比-x1可知)为此我特地去实验楼环境查看,结果一样!但当我运行od -tc -tx2 testfile与od -tc -tx4 testfile时出现了这样的情况:
综上,我得出一个问题:到底是linux关于od命令的注释错了还是linux中一个字母占的不是一个字节?
2.分析完od -tx -tc XXX命令的功能得出的结论:XXX内容的ascii字符输出一次,以及每四个字符的十六进制倒序输出一次,每行十六个字符。OK!现在开始设计源代码。
//t头文件
#ifndef HEAD_H
#define HEAD_H
#include <stdlib.h>
#include <stdio.h>
FILE *fp;
char ch;
char a[16];
int num_A;
void GetChar();
void PrintHex(char ch);
void PrintAscii(char ch);
#endif
头文件中有一些全局变量以及函数声明
//单独定义的全局变量
#ifndef GLOBE_H
#define GLOBE_H
int num;
char temp[4];
int k;
#endif
这里单独定义某些全局变量是因为如果把它们写进head.h会出现变量多重定义的错误。具体原因看下面代码就可明白。
//从文件中读取16个字符写进固定长度和数组
#include "head.h"
#include "globe.h"
void GetChar(){
while(!feof(fp) && (num < 16)){
a[num++] = fgetc(fp);
}
num = 0;
}
为什么要把数据写进数组?是因为-tc和-tx实际上要对数据输出两次,一次单独拿出来16个字符输出纯粹为了方便!
//以十六进制形式输出a数组中暂存的16个字符
#include "globe.h"
#include "head.h"
void PrintHex(char ch){
if(k > 0){
k--;
temp[k] = ch;
}
else{
for(;k < 4;k++)
printf("%x",temp[k]);
printf(" ");
num_A--;
}
}
//以ascii输出字符
#include "head.h"
void PrintAscii(char ch){
printf("%c ",ch);
}
//makefile
myod:main.o PrintHex.o PrintAscii.o GetChar.o
gcc -g *.o -o myod
main.o:main.c head.h
gcc -c main.c
PrintHex.o:PrintHex.c globe.h head.h
gcc -c PrintHex.c
PrintAscii.o:PrintAscii.c head.h
gcc -c PrintAscii.c
GetChar.o:GetChar.c globe.h head.h
gcc -c GetChar.c
五.结果分析


没错,程序是有bug的。其实我调试了很长时间都没有找到问题!不明白为什么只有第一行输出格式不正确。由于时间原因,我只能带着问题输出实验结果,如果大家发现问题所在,望告知!同时,我自己也会调试。
六.总结
很长时间没有写代码,的确手生了很多,再加上在linux环境下也比较陌生,所以整整花了一下午时间才到达这种程度。其实这个程序还有很多改进的地方,比如修复bug;前面加上行数;命令选项扩展等。日后有时间我会把这些内容重新改进。
20179209课后作业之od命令重写的更多相关文章
- String字符串类课后作业
String动手动脑和课后作业 请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 结果: 总结:在Java中,内容相同的字串常量(&quo ...
- JAVA第三周课后作业
JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...
- java课后作业
课后作业之字串加密: 设计思想: 1.输入要加密的英文子串str 2.定义num=str的字符串长度 3.将字符串转化为单个字符 4.每个字符+3,向后移3个 5.定义str1,将新得到的每个字符加到 ...
- linux之od命令
od [OPTION]... [FILE]... 把文件用8进制或者其他的格式显示出来.通常用于查看特殊格式文件的内容. 这个命令默认把文件的内容用八进制的形式清晰地写在标准输出上.如果是多个文件 ...
- [转]Linux之od命令
转自:http://os.51cto.com/art/200912/173136.htm 随着计算机飞速的发展,很多人开始学习Linux,怎样才能学好Linux,一定要学好Linux的命令.学习Lin ...
- linux下hexdump和od命令:显示文件十六进制格式
Linux指令: od 示例用法: od -c hello Linux指令: od od命令用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进 ...
- linux od命令
用户通常使用od命令查看特殊格式的文件内容.通过指定该命令的不同选项可以以十进制.八进制.十六进制和ASCII码来显示文件.od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Du ...
- MyOD-Linux od命令的实现
MyOD 一.设计思路 确定MyOD的要求 根据需求可知MyOD需要实现类似Linux下 od -tx -tc XXX的功能,于是先去网上查找了一下od命令的-tx以及-tc参数的作用,经查找后了解到 ...
- python基础一之课后作业:编写登录接口
1 # Author : Mamba 2 3 #python基础一之课后作业:编写登录接口 4 5 # 输入用户名密码 6 # 认证成功后显示欢迎信息 7 # 用户名3次输入错误后,退出程序 8 # ...
随机推荐
- [java基础] 002 - 位运算符的详解和妙用
一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...
- centos7安装hadoop2.6.1,详细教程
1.我搭建的是三台centos7的环境 首先准备三个centos7(文中出现的所有的链接都是我自己的) centos7下载地址(也可以上官网自行下载):https://pan.baidu.com/s/ ...
- angular使用canvas操作时报错
最近,用 angular 前端框架为应用登录新增图形验证码认证,由于没有现成的插件,于是便使用canvas+js操作,也是可以正常使用,但是在编译阶段却有个报错: ERROR in src/app/l ...
- 手动编译高速扫描器MasScan
常见的端口扫描器有NMAP,ZMAP,superScan等,我们使用后各有千秋,ZMAP号称44分钟扫全球ip,那么有没有比ZMAP更快的端口扫描器呢,今天我们来研究下masscan,这款扫描器号称3 ...
- 慕课网python进阶函数式编程学习记录
函数 不等于 函数式 函数: function 函数式: functional,一种编程范式 就好比计算机 不等于 计算 c语言: 函数 python :函数式(计算) 函数式编程特点: 把计算视为函 ...
- koajs 项目实战(二)
此篇文章,接 koajs 项目实战(一)后写 (六)表单提交和参数接收 表单: <form method="post" action="./users/zhuce& ...
- doubango库改动Contact内容的地方
要在手机client中实现会议功能,从音频会议開始(可能会优点理点).server用的是Centos7 64 + Freeswitch1.4.client是基于doubango的imsdroid.还有 ...
- eclipse 如何把java项目转成web项目
经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目. 解决步骤: 1.进入项目目录,可看到.project文件,打开. 2.找到<natures> ...
- CSS环绕球体的旋转文字-3D效果
代码地址如下:http://www.demodashi.com/demo/12482.html 项目文件结构截图 只需要一个html文件既可: 项目截图: 代码实现原理: 该示例的实现过程很简单,主要 ...
- 11-BeautifulSoup库详解
---恢复内容开始--- 灵活又方便的网页解析库,处理高效,支持多种解析器. 利用它不用编写正则表达式即可方便地实现网页信息的提取. 这个库有四个主要方法吧,其中xlml是最常用的,他的标签选择器可以 ...