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的使用