MyOD C语言代码实现
Myod C语言实现
一、题目要求
1 复习c文件处理内容
2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
3. main与其他分开,制作静态库和动态库
4. 编写Makefile
5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
6 在博客园发表一篇博客,重点写遇到的问题和解决过程
二、设计思路
od命令:

因此,我们的目标是实现用C语言读取文本,以16进制输出文本内容,并且输出相应的ascii码。
C语言读取命令行
为了取用我们命令行的参数,在主函数myod.c中,应该采用如下形式:int main(int argc,char *argv[])。
与我们上学期所学的java语言不同,C语言读取命令行参数会从运行该程序的指令开始存储,效果如下图:

因此,我们输入的文件名在程序中被argv[1]所存储。
伪代码
主函数
int main(int argc,char *argv[]){
尝试打开文件;
if(文件打开失败||输入命令本身存在错误)
报错
else
调用功能函数(传入文件指针)
}
功能函数
while(没有读到文件末尾){
读取16个字节
以16进制形式输出
将ascii码输出
}
实现过程中遇到的问题
1.计数标识位数不满足7位
在代码运行过程中,左侧计数标识在linux中应该形如“0000020”等形式,但是在我运行过程中却是如下显示:

解决:
在这里我们其实只需要将输出的格式稍加改动,printf("%07x",参数)的显示格式即为7位显示,不满7位会在前面补0。
2.无法显示“\n”
这个其实在上学期实现就已经注意到了这个问题,解决办法为当读到'\n'时,我们手动输出printf("\\n");,并在ascii码输出行补上'\n'的ascii码即可。
代码运行


建立静态库

建立动态库

编写makefile文件

总结
这次的代码实现起来不算很难,主要在于题目要求仅仅实现-tc -tx的功能,实际上如前面所展示的,od命令的参数还有很多中,其实还有很大的扩充空间。
码云链接
MyOD C语言代码实现的更多相关文章
- Latex中插入C语言代码
Latex是一个文本排版的语言,能排版出各种我们想要的效果.而且用代码排版的优点是易于修改板式,因此在文本内容的排版时,Latex应用十分广泛. 当我们需要在Latex中插入代码时,就需要用到 \us ...
- loadrnner添加C语言代码的几种方式
今天有人在群里问,想直接把自己的C语言代码让lr调用,该怎么搞. 这东西说来简单,只是对Loadrunner这工具不熟悉可能才会有这种问题吧.个人理解,一般有三种方法吧,废话不多,直接干货. 1.直接 ...
- HTML之一语言代码
HTML的lang属性可用于网页或部分网页的语言.这对搜索引擎和浏览器是有帮助的. 同时也可以是指HTTP Header中的Accept-Language/Content-Language. ISO ...
- 让你的Windows不断重启的C语言代码
原文:让你的Windows不断重启的C语言代码 没有写Linux的原因是因为搞不定Linux下的权限问题,而Windows下基本上使用电脑的用户都是管理员,所以钻个空了,不多说下面是代码#includ ...
- 国家语言,语言代码,locale id对应表
国家语言,语言代码,locale id对应表.比如 en_US对应的id为1033, 中文的locale=zh_CN,id=2052. Locale Languagecode LCIDstring L ...
- 如何提高单片机C语言代码效率
代码效率包括两个方面内容:代码的大小和代码执行速度.如果代码精简和执行速度快,我们就说这个代码效率高.一般情况下,代码精简了速度也相应提上来了.单片机的ROM和RAM的空间都很有限,当您编程时遇到单片 ...
- 使用highlight.js高亮静态页面的语言代码
显示静态的代码其实html的pre标签基本可以满足需求了,至少不会将换行的文本显示成一堆字符串. 不过能使静态的文本能高亮显示,倒更炫酷一点.其实很简单的,引入highlight.js包,可以使用cd ...
- HTML5 脚本 语言代码 URL 符号实体 ASCII码 颜色
1.HTML<noscript> 标签 <noscript> 标签提供无法使用脚本时的替代内容,比方在浏览器禁用脚本时,或浏览器不支持客户端脚本时. <noscript& ...
- 02 How to Write Go Code 如何编写go语言代码
How to Write Go Code 如何编写go语言代码 Introduction 介绍 Code organization 组织代码 Overview 概述 Workspaces ...
随机推荐
- leecode刷题(23)-- 合并两个有序链表
leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...
- O022、如何使用 OpenStack CLI
参考https://www.cnblogs.com/CloudMan6/p/5402490.html 本节首先讨论如何删除image,然后介绍OpenStack CLI 的使用方法,最后讨论如何 ...
- Hive编程指南读书笔记(1):
1.Mapreduce是一种计算模型,将计算任务分割成多个可以在服务器集群中并行执行的任务,然后分散到一群家用的或者服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性. 2.mapreduce的两 ...
- docker toolbox的redis 配置主从及哨兵模式保证高可用
redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一 主从模式1 搜索redis镜像 docker search redis2 拉取镜像docker pul ...
- 禁止ios10双指缩放
document.addEventListener('gesturestart', function(event) { event.preventDefault(); });
- Centos7下安装ZooKeeper
1.下载源码 zookeeper 需要jdk的支持,需要先安装jdk 官网下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/ 选择最新的版本进行下载 ...
- orcle_day02
第三章:单值函数 函数分为: 1.单值函数 1.字符函数 2.日期函数 3.转换函数 4.数字函数 2.分组函数(后面的章节再做学习) 哑表dual dual是一个虚拟表,用来构成select的语法规 ...
- linux 静态路由
用ip route删除默认路由 ip route del default via 192.168.18.1 用route删除默认路由route del default gw 192.168.18.1 ...
- idea 下获取路径下文件的方法
想读取resouce/temp下的test.txt文件.方式一:File sourceFile = ResourceUtils.getFile("classpath:temp/test.tx ...
- 使用gson将字符串转换成对象
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create(); System.out.pr ...