2020-2021-1 20209308《Linux内核原理与分析》第二周作业---myod实验

Linux 基础

myod实验

1.实验要求
1.复习c语言文件系统内容;
2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能;
3. main与其他分开,制作静态库和动态库;
4. 编写Makefile;
5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息。


2.实验过程
1.代码过程
myod.c:

#include "head.h"
#include <stdio.h>

int main(){
 char name[50];
 printf("please input your txtname:");
 scanf("%s",name);
 asc(name);
 hex(name);
 return 0;
}

ascii.c:

#include "head.h"
#include <stdio.h>

void asc(char *name){
 FILE *fp;
 char ch;
 fp = fopen(name,"r");
 ch = fgetc(fp);
 printf("the ascii:
");
 while(ch!=EOF){
  if(ch=='
')
   printf("
");
  else
   printf("%4d",ch);
  ch = fgetc(fp);
 }
 fclose(fp);
}

hexacdecimal.c

#include "head.h"
#include <stdio.h>

void hex(char *name){
 FILE *fp;
 char ch;
 fp = fopen(name,"r");
 ch = fgetc(fp);
 printf("the hexadecimal:
");
 while(ch!=EOF){
  if(ch=='
')
   printf("
");
  else
   printf("%4x",ch);
  ch =fgetc(fp);
 }
 fclose(fp);
}

2.编译文件并运行

3.制作静态库

4.制作动态库

5.makefile

makefile文件:

odtest:	myod.o	ascii.o	hex.o
		gcc	myod.o	ascii.o	hex.o -o	odtest
myod.o:	myod.c	head.h
		gcc	-c	myod.c	-o	myod.o
ascii.o:	ascii.c	head.h
		gcc	-c	ascii.c	-o	ascii.o
hex.o:		haxadecimal.c	head.h
		gcc	-c	haxadecimal.c	-o	hex.o

3.实验所需知识

Note:

  • 文件系统 : c语言文件系统和文件指针使用c语言自带的文件系统库可以方便地打开系统中的文件,在fopen命令中,r为可读权限,w为可写权限,rw+为所有权限。文件输出结尾为EOF。
  • od命令:od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
  • od -tx -tc xxx:-tx是以十六进制输出文件内容,默认为四字节成一组;-tx则是输出字节所对应的ascll值,

tips:

  • 命令格式: od [<选项><参数>] [<文件名>]
  • 命令选项:
    a:具名字符;
    c:ASCII字符或者反斜杠;
    d[SIZE]:十进制,正负数都包含,SIZE字节组成一个十进制整数;
    f[SIZE]:浮点,SIZE字节组成一个浮点数;
    o[SIZE]:八进制,SIZE字节组成一个八进制数;
    u[SIZE]:无符号十进制,只包含正数,SIZE字节组成一个无符号十进制整数;
    x[SIZE]:十六进制,SIZE字节为单位以十六进制输出,即输出时一列包含SIZE字节。在默认条件下,以四个字节为一组输出

4.遇到的问题
①在链接生成动态库时,已知有两种办法,一是将自己的so文件加入到系统库文件中去,二是用export LIBRARY指令为文件手动指引函数库。问题发生在我不想每次代码都要改动系统文件,手动指引函数库还是无法正确使得可执行程序。这时我发现gcc -g可以成功将动态库与主函数链接起来并执行,但是没有找到这其中的原因。希望老师和知道这个原因的同学来解答。
②在调试函数时,cgbd调试中每次执行到键入变量值信息的时候就会挑不出输出,换成gdb后便可以,百度时说在titty模式下才可输值,但是转变模式之后也不成功,希望老师和知道这个原因的同学来解答。

原文地址:https://www.cnblogs.com/ppswaggy/p/13833958.html