zoukankan      html  css  js  c++  java
  • 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模式下才可输值,但是转变模式之后也不成功,希望老师和知道这个原因的同学来解答。

  • 相关阅读:
    几个ssh和sftp的命令
    发现一个github的奇葩设定
    插耳机对orientation sensor的影响
    android中MediaPlayer类的用法
    Oracle 高性能SQL引擎剖析----执行计划
    【转】对列式数据库的一点总结和展望
    【转】大数据分析(Big Data OLAP)引擎Dremel, Tenzing 以及Impala
    TCP/IP协议详解---概述
    读取HttpWebResponse流的两种方法及注意的问题
    This project references NuGet package(s) that are missing on this computer.
  • 原文地址:https://www.cnblogs.com/ppswaggy/p/13833958.html
Copyright © 2011-2022 走看看