2019-2020-1 20209311《Linux内核原理与分析》 MyOD

2019-2020-1 20209311《Linux内核原理与分析》 MyOD

任务详情
1.复习c文件处理内容
2.编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
3.main与其他分开,制作静态库和动态库
4.编写Makefile
5.提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
6.在博客园发表一篇博客,重点写遇到的问题和解决过程

使用的代码

head.h

#ifndef HEAD_H
#define HEAD_H
void hex(char *name);
void ascii(char *name);
#endif

myod.c

#include "../include/head.h"
#include <stdio.h>
void main()
{ 
  char filename[50];
  printf("please input the filename:");
  scanf("%s",filename);
  hex(filename);
  ascii(filename);
}

hex.c

#include "../include/head.h"
#include <stdio.h>
void hex(char *filename)
{
  FILE *fp;
  char ch;
  fp=fopen(filename,"r");
  ch=fgetc(fp);
  printf("Hex:\n");
  while(ch!=EOF)
  {
    if(ch=='\n')
      printf("\n");
    else
      printf("%4x",ch);
      ch=fgetc(fp);
  }
  fclose(fp);
}

ascii.c

#include "../include/head.h"
#include <stdio.h>
void ascii(char *filename)
{
  FILE *fp;
  char ch;
  fp=fopen(filename,"r");
  ch=fgetc(fp);
	printf("Ascii:\n");
  while(ch!=EOF)
  {
    if(ch=='\n')
      printf("\n");
    else
    	printf("%4d",ch);
    	ch=fgetc(fp);
  }
  fclose(fp);
}

Makefile

VPATH=src:bin:include

testmyod-20209311:myod.o ascii.o hex.o
        gcc ./bin/myod.o ./bin/ascii.o ./bin/hex.o -o ./bin/testmyod-20209311
myod.o:myod.c head.h
        gcc -c ./src/myod.c  -I ./include -o ./bin/myod.o
ascii.o:ascii.c head.h
        gcc -c ./src/ascii.c  -I ./include -o ./bin/ascii.o
hex.o:hex.c head.h
        gcc -c ./src/hex.c  -I ./include -o ./bin/hex.o

myod.a:myod.o ascii.o hex.o
        ar rcvs ./lib/libmyod.a ./bin/myod.o ./bin/ascii.o ./bin/hex.o
myod.so:myod.o ascii.o hex.o
        gcc -shared -o ./lib/libmyod.so ./bin/myod.o ./bin/ascii.o ./bin/hex.o

运行结果截图



遇到的问题及解决方案

1.VPATH=src:bin:include可以在当前目录找不到所依赖的文件的情况下,到所指定的目录中去找寻文件。但要注意,VPATH只能指定依赖文件的位置,gcc的命令中依然需要指定文件位置。
2.当Makefile中存在多个目标时,默认执行第一个,要执行其他文件需要在make命令后加目标名。
参考资料:Makefile VPATH和vpath的使用

posted @ 2020-10-18 22:08  dkkk7  阅读(120)  评论(1编辑  收藏  举报