一、实验要求:
1. 复习c文件处理内容;
2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能;
3. main与其他分开,制作静态库和动态库;
4. 编写Makefile;
5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息。
二、实验原理
od命令
1. 功能
od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
2. 命令选项
-t<TYPE>
:指定输出格式,格式包括a、c、d、f、o、u和x,各含义如下:
- a:具名字符;
- c:ASCII字符或者反斜杠;
- d[SIZE]:十进制,正负数都包含,SIZE字节组成一个十进制整数;
- f[SIZE]:浮点,SIZE字节组成一个浮点数;
- o[SIZE]:八进制,SIZE字节组成一个八进制数;
- u[SIZE]:无符号十进制,只包含正数,SIZE字节组成一个无符号十进制整数;
- x[SIZE]:十六进制,SIZE字节为单位以十六进制输出,即输出时一列包含SIZE字节。在默认条件下,以四个字节为一组输出
三、实验过程
实验代码:
myod.c
1 #include<stdio.h> 2 #include "head.h" 3 #include<string.h> 4 void main(){ 5 char file[50]; 6 printf("input the txt name:\n"); 7 scanf("%s",file); 8 ascii(file); 9 dx(file); 10 }
ascii.c(ascill码)
#include "head.h" #include<stdio.h> #include<string.h> void ascii(char *file) { FILE *fp; char ch; fp=fopen(file,"r"); ch = fgetc(fp); printf("ascii output\n"); while(ch!=EOF) { if(ch == '\n'){ printf("\n"); ch = fgetc(fp); continue; } printf("%4d",ch); ch = fgetc(fp); } fclose(fp); printf("\n"); }
decimal.c(16进制)
#include "head.h" #include<stdio.h> #include<string.h> void dx(char *file) { FILE *fp; char ch; fp=fopen(file,"r"); ch = fgetc(fp); printf("sixteen output\n"); while(ch!=EOF) { if(ch == '\n'){ printf("\n"); ch = fgetc(fp); continue; } printf("%4x",ch); ch = fgetc(fp); } fclose(fp); printf("\n"); }
头文件():
void ascii(char *flie); void dx(char *flie);
四、实验过程
1.编译文件并进行运行
2.main与其他分开,制作静态库
3.main与其他分开,制作动态库,对ascii.c和decimal.c制作动态库,
4.编写Makefile
5.运行结果(makefile)
五、实验问题与思考:
在本次实验中,我遇到了在Linux中在读取点txt文件中,到最后都会自动加多一个“\n”,所以在读取ascii码时候会直接输出10,刚刚开始时候用的是if-else的语句来判断是否打印出,但发现是回车键的时,不能打印出来回车键,而是ascii码10,最后只判断是否回车键来进行回车键操作,而其他的直接输出,就可以运行出想要的结果了。
还有就是在静态库以及动态库的使用了,要检查自己的.o文件是否真的以及存在了,否则就会报错,所以要多检查自己的文件类型,建议在生成的时候饭宅不同的文件夹里面,这次实验我没有分好文件夹,所以就有时候文件要删掉重来。