181310_方位 MyOD选作

一、任务说明

1 复习c文件处理内容

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

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

4. 编写Makefile

二、实验操作

1.复习c文件处理内容:

编译操作,动态库与静态库的操作以及make程序使用的复习将会在实验步骤中体现,已做回顾。

2.

(1)首先对于所要实现的功能进行前瞻,了解其功能

od -tx -tc test_1310

  

 

 

 txt的内容是:

 

 

 也可以利用man od查看功能:

man od

  由此我们可以得出,

od 命令用途是以指定格式显示文件。
常见的文件为文本文件和二进制文件。此命令主要用来查看保存在二进制文件中的值。比如,程序可能输出大量的数据记录,每个数据是一个单精度浮点数。
od使用字符串类型显示文件,来格式化输出。
od [ -v ] [ -A AddressBase ] [ -N Count ] [ -j Skip ] [ -t TypeString ... ] [ File ... ]
具体可查看man od解释
(2)编写需求代码

 

其中:

需要的第一c文件即:

 1 #include"head.h"
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 void od(char STR[1000],int i)
 6 {
 7     int k=1;
 8     int j=0;
 9     int m=0;
10     int line=0;
11     printf("%06d  ",line);
12     putchar(STR[0]);
13     for(k=1;k<=i;k++){
14         if(k%16!=0&&STR[k]!='\0'){
15             if(STR[k]!='\n')
16             {
17                 printf("  %2c",STR[k]);
18                 continue;
19             }
20             else{
21                 printf("  \\n");
22                 continue;
23             }
24         }
25         else{
26             printf("\n      ");
27             for(j=m;j<k;j++){
28                 printf("  %02x",STR[j]);
29             }
30             printf("\n%06d",k+2);
31 
32             m=k;
33         }
34     }
35     printf("\n");
36 }

1310_out.c:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 int main()
 5 {
 6
 7 
 8 FILE *fp;
 9 fp=fopen("test_1310.txt","rb");
10 if(fp==NULL){
11 printf("Failure to open file\n");
12 return 0;
13 }
14 char ch;
15 char STR[1000];
16 int i,n;
17 i=0;
18 while((ch=fgetc(fp))!=EOF){
19 STR[i]=ch;
20 i++;
21 //putchar(ch);
22 }
23 STR[i]='\0';
24 //printf("%d",i);
25 fclose(fp);
26 od(STR,i);
27 }

同时还需要定于head.h:

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

 

 (3)在编译一块,直接利用静态库与动态库进行操作,无需进行直接的编译,由此便也完成了一遍库的学习:

静态库:

1 gcc 181310_od.c -o main -I/home/xfw/ljp/myod_xfw -L. -lod
2 gcc -c -I/home/xfw/ljp/myod_xfw *c
3 gcc 181310_od.c -o main -I/home/xfw/ljp/myod_xfw -L. -lod

 

 

动态库:

gcc -fPIC -c -I/home/xfw/ljp/myod_xfw 181310_od.c
gcc -shared -o dong.so 181310_od.o
sudo cp dong.so /usr/lib

注意此处需要root权限来移动库函数去到lib下

 

 

 (4)makefile之make程序使用

1 test1310:181310_od.o 1310_out.o
2         gcc -o test1310 181310_od.o 1310_out.o head.h
3 181310_od.o:181310_od.c
4         gcc -c 181310_od.c -o 181310_od.o
5 1310_out.o:1310_out.c
6         gcc -c 1310_out.c -o 1310_od.o
7                                 

 

调用make:

 

 (5)结果

 

 三、实验问题

1.有关显示问题:但linux的od命令可显示出“\n”,似乎除了必要的操作,该符号一定存在。

解决:手动操作的时候注意转移字符等的特殊符号选取

2.有关缺省问题:在末尾处的ascii码段无法正常显示

解决:有关程序代数参数的调试,需要注意边界条件!

四、实验心得

1.该实验能使得我们对于liunx中一条自带指令有了更深的理解,为什么许多功能指令需要封装,需要给出,其背后都是系统开发者的心血,一条指令如此,上千条指令又该如何?

2.关于设计字符的编程似乎很有难度,这能体现自身的基础不扎实。

3.前面的学习均能用到,算是又熟练了一遍,实验和前面内容成了一个学习系统,这样很好。

 

 

 
posted @ 2020-10-11 21:59  David_xfw  阅读(123)  评论(0编辑  收藏  举报