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来判断。总而言之,付出总有回报,整个流程下来感觉学到了很多东西。

 

posted on 2020-10-11 12:44  20181302张辰旭  阅读(119)  评论(0编辑  收藏  举报