MyOD

一、任务详情

1 复习c文件处理内容

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

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

4. 编写Makefile

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

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

二、具体步骤

(一)首先复习了C语言与MyOD命令的相关内容

  • od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
  • -t之后指定输出的进制,可以包括:a、c、d、f、o、u以及x。它们分别代表字符、ASCII字符或者反斜杠、十进制、浮点、八进制、无符号十进制、十六进制
  • -tx后加数字表示以几个字符逐个输出。例如:-tx1则是按一个字符逐个输出

(二)主要思路及编写代码

  1. 主函数myod.c用来文件的读取和关闭
  2. od.c函数用来实现od -tx -tc 的功能

head.h

#ifndef HEAD_H
#define HEAD_H
void od(char STR[],int);
#endif

od.c

#include"head.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void od(char STR[1000],int i)
{
int k=1;
int j=0;
int m=0;
int line=0;
printf("%06d ",line);
putchar(STR[0]);
for(k=1;k<=i;k++){
if(k%16!=0&&STR[k]!='\0'){
if(STR[k]!='\n')
{
printf(" %2c",STR[k]);
continue;
}
else{
printf(" \\n");
continue;
}
}
else{
printf("\n ");
for(j=m;j<k;j++){
printf(" %02x",STR[j]);
}
printf("\n%06d",k+2); m=k;
}
}
printf("\n");
}

myod.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
//char filepath[100]; FILE *fp;
fp=fopen("test.txt","rb");
if(fp==NULL){
printf("Failure to open file\n");
return 0;
}
char ch;
char STR[1000];
int i,n;
i=0;
while((ch=fgetc(fp))!=EOF){
STR[i]=ch;
i++;
//putchar(ch);
}
STR[i]='\0';
//printf("%d",i);
fclose(fp);
od(STR,i);
}

(三)制作静态库和动态库

(四)编写makefile

(五)运行结果

三、问题与总结

起初,我对于od命令可以说是十分陌生,根本不清楚它是用来做什么的,通过查阅资料我大致明白了它的含义。在调试的过程中我也遇到了许多困难,比如在输出时如何控制好按行输出,通过判断文件是否读完即STR[i]=='\0'是否成立以及i是否等于15来判断。总而言之,付出总有回报,整个流程下来感觉学到了很多东西。

20181302编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能的更多相关文章

  1. 学号20175313 《实现Linux下od -tx -tc XXX的功能》第九周

    目录 MyOD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.代码链接 六.代码实现过程中遇到的问题 七.运行结果截图 八.参考资料 MyOD 一.题目要求 编写MyOD.java 用j ...

  2. 实现Linux下od -tx -tc XXX的功能

    实现Linux下od -tx -tc XXX的功能 一.od命令 (1)功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直 ...

  3. Linux下MySQL报Table 'xxx' doesn't exist错误解决方法,表名存在大小写区分

    Linux服务器上在线装了个MySQL,但是部署web应用时一直报后台一直报错:Table 'xxx' doesn't exist. 本地测试一直都是正常的,同样的代码,同样的数据库,表是存在的,但是 ...

  4. 【转】Linux下cp: omitting directory `XXX'问题解决

    在linux系统中复制文件夹时提示如下: Shell代码 [root@idtp4 site-packages]# /site-packages/ cp: omitting directory ‘yag ...

  5. Linux下c语言实现myod

    首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码. #include<stdio.h> #define N 1000 int main() { int c ...

  6. Linux下编写-makefile-详细教程(跟我一起写-Makefile-Markdown整理版)

    目录 概述 关于程序的编译和链接 Makefile 介绍 Makefile的规则 一个演示例子 make是怎样工作的 makefile中使用变量 让make自己主动推导 另类风格的makefile 清 ...

  7. [转] Linux下编写脚本实现Daemon

    在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Se ...

  8. 20155322 2017-2018-1《信息安全系统设计》第二周 课堂测试 Linux下C语言实现MYOD

    20155322 2017-2018-1<信息安全系统设计>第二周 课堂测试 Linux下C语言实现MYOD [博客目录] 静态库测试 实现方法 相关资料 操作 动态库测试 实现方法 相关 ...

  9. 2.linux下Makefile编写规范

    转自陈皓 (CSDN) 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 profession ...

  10. Linux下高效编写Shell——shell特殊字符汇总

    Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好 ...

随机推荐

  1. 微信小程序学习记录

    尺寸单位 rpx 常常以iphone6为开发基准,  1px = 2rpx,不同设备的比例是不同的: 小程序生命周期 和vue的生命周期很相似,不过小程序的生命周期和页面.组件的生命周期又又一点不一样 ...

  2. 全网echarts案例资源大总结和echarts的高效使用技巧(细节版)

    全网echarts案例资源大总结和echarts的高效使用技巧(细节版) 众所周知,在现今的开发大环境下,数据可视化(大屏化)项目在前端开发中的比重越来越大.而其中使用率最高的插件无疑就是 Apach ...

  3. js转换文件的size由KB转换为B、MB、GB

    // 单位转换export function bytesToSize(sizes) { let mYsize = sizes if(mYsize == 0) return 0 + 'B'; if(mY ...

  4. 实时搜索引擎Elasticsearch

    Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. E ...

  5. Rsync等传统文件同步方式已过时 如何寻找替代产品?

    Rsync原本是在Linux系统下面的一个文件同步协议,随着技术的发展,它也有其它版本的,如Windows和AIX.HPUX下面都有相应的版本可以支持的.它有很多版本都是免费的,配置也不复杂,所以很多 ...

  6. JS学习-async/await

    async/await 它保证函数的返回值为 promise. 用更少的.then()块来封装代码,同时它看起来很像同步代码 注意:可能会因为大量await的promises相继发生而变慢. asyn ...

  7. Qt实现collapsePanel(折叠)功能

    实践过程中,看到C#实现的CollapsePanel功能,比一般的TabWidget更加直观,充分利用了页面空间,遂感到很有兴趣,也查阅了很多资料搜索Qt在这方面的实现. 目前来说,比较常见的作法就是 ...

  8. 5 RDD编程

    一.词频统计 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words flatmap() 3.全部转换为小写 lower() 4.去掉长度小于3的单词 filter() 5. ...

  9. Leetcode——二分法bisect_left,bisect_right

    !前提--列表有序 case 1 如果列表中没有元素x,那么bisect_left(ls, x)和bisec_right(ls, x)返回相同的值,该值是x在ls中"合适的插入点索引,使得数 ...

  10. 【Delphi11】「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite.v17.0分享」

    [Delphi11]转存或下载后将后缀名".exe"删除即可,或者直接右击解压缩也可.「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite. ...