MyOD 20181227李根

实验要求:

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

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

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

  4. 编写Makefile;

  5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息。

 

实验原理:

od命令

1. 功能

  od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。

常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出。

2. 命令格式

od [<选项><参数>] [<文件名>]

3. 命令选项

-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字节。在默认条件下,以四个字节为一组输出。

 

实验过程:

1.代码部分

main.c:

#include <stdio.h>
#include <stdlib.h>
#define N 100
#define M 17
int main(char argv[])
{
    FILE *fp;
    char args[N],name[N],ch;
   int i=0;
   printf("please input file name:");
    gets(name);
    if((fp=fopen(name,"r"))==NULL)
    {
        printf("ERROR!");
        exit(0);
    }
    while(fgets(args,17,fp))
    {
        ascii(args,i++);
    hex(args);
    }
    fclose(fp);

 }

 

hex.c:

#include<stdio.h>
void hex(char args[])
{
    int i;  
    printf("       ");
    for(i=0;args[i]!='\0';i++)
    {
        if(args[i]=='\n')
                    printf("\\n");
        else
                 printf("%4c",args[i]);
    }
   printf("\n");
}

 

ascii.c:

#include<stdio.h>
void ascii(char args[],int j)
{
    int i;
    printf("%07o",16*j);
    j++;
    for(i=0;args[i]!='\0';i++)
    {
    if(args[i]=='\n')
        printf("%x",'\n');
        printf("%4x",args[i]);
    }
    printf("\n");
}

 

makefile:

myodl: main.o ascii.o hex.o
	gcc main.o ascii.o hex.o -o 1227myod
main.o: main.c
	gcc -c main.c
ascii.o: ascii.c
	gcc -c ascii.c
hex.o: hex.c
	gcc -c hex.c

 

test.txt:

hello 20181227
li gen

 

2.具体过程

(1)新建想要输出的txt文件;

(2)编写实现代码;

(3)静态库实现过程:

 

(4)动态库实现过程:

 

(5)makeflie实现过程:

 

实验中遇到的问题及如何解决:

1.在静态库过程中,到最后一步执行  ./myod   时,报错提示没有myod文件,经过检查后发现开始就没有编译成功,在输入命令 gcc -g  main.c ascii.c hex.c -o myod后解决了问题。

 

2.在makefile过程中,输入 make 命令时出现如上图所示报错,在上网查资料之后发现是 makefile 文档前面不应该用空格,而是要用 tab 键,在删掉文档中前面的空格后这个报错便没有了;

但随后有了第二个错误  myod is up to date ,最后将 makefile 文档中 myod 改成 myod1 便解决了该问题。

posted @ 2020-10-11 17:24  20181227  阅读(85)  评论(0编辑  收藏  举报