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则是按一个字符逐个输出
(二)主要思路及编写代码
- 主函数myod.c用来文件的读取和关闭
- 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来判断。总而言之,付出总有回报,整个流程下来感觉学到了很多东西。