Myod实验-20181321

一、实验要求:

  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文件是否真的以及存在了,否则就会报错,所以要多检查自己的文件类型,建议在生成的时候饭宅不同的文件夹里面,这次实验我没有分好文件夹,所以就有时候文件要删掉重来。

posted @ 2020-10-11 18:58  QBLL  阅读(105)  评论(1编辑  收藏  举报