• 第二周选做(myod)


    02.第二周myod(选做)

    第五周作业 内核编译与系统调用(30分)

    https://www.cnblogs.com/20199304lbs/p/12151770.html

    实验要求:

    • 复习c文件处理内容

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

    • main与其他分开,制作静态库和动态库

    • 编写Makefile

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

    • 在博客园发表一篇博客,重点写遇到的问题和解决过程

    Linux od命令详解:

    • 1.功能

      • od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。od命令系统默认的显示方式是八进制,名称源于Octal Dump。常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出,不管是IEEE754格式的浮点数还是ASCII码,od命令都能按照需求输出它们的值。
    • 2.命令格式

      • od [<选项><参数>] [<文件名>]
    • 3.命令选项

    1. A<RADIX>,--address-radix=RADIX:选择以何种基数表示地址偏移;
    2. -j<BYTES>,--skip-bytes=BYTES:跳过指定数目的字节;
    3. -N,--read-bytes=BYTES:输出指定字节数;
    -S<BYTES>, --strings[=BYTES]:输出长度不小于指定字节数的字符串;
    4. -v,--output-duplicates:输出时不省略重复的数据; 
    5. -w<BYTES>,--width=<BYTES>:设置每行显示的字节数,od默认每行显示16字节。如果选项--width不跟数字,默认显示32字节;
    6. -t<TYPE>,--format=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字节。
    --help:在线帮助; 
    --version:显示版本信息。
    

    实验步骤:

    1.代码部分:

    • ascii.c(显示ASCII字符):
    #include "head.h"
    #include <stdio.h>
    void ascii(char *name)
    {
      FILE *fp;
      char ch;
        fp=fopen(name,"r");
        ch=fgetc(fp);
      printf("output the ascii:
    ");
    
      while(ch!=EOF)
      {
         if(ch=='
    ')
            printf("
    ");
         else
            printf("%4d",ch);
            ch=fgetc(fp);
      }
      fclose(fp);
    
    }
    
    • hex.c(显示十六进制输出):
    #include "head.h"
    #include <stdio.h>
    void hex(char *name)
    {
      FILE *fp;
      char ch;
      printf("output the hex:
    ");
      fp=fopen(name,"r");
      ch=fgetc(fp);
      while(ch!=EOF)
      {
        if(ch=='
    ')
        printf("
    ");
        else
        printf("%4x",ch);
        ch=fgetc(fp);
       }
       fclose(fp);
    }
    
    • MYoD.c:
    #include "head.h"
    #include <stdio.h>
    void main()
    { 
      char name[50];
      printf("please input the txtname:");
      scanf("%s",name);
      ascii(name);
      hex(name);
    }
    

    2.流程部分:

    用myod XXX实现Linux下od -tx -tc XXX的功能代码运行截图:

    静态库实现过程及截图:

    ar cr MYoD.a hex.o ascii.o
    gcc -o MYoD MYoD.c ./MYoD.a
    


    动态库实现过程及截图:

    gcc -shared -fpic -o MYoD.so ascii.c hex.c
    gcc -o MYoD2 MYoD.c ./MYoD.so
    

    makefile文件制作及运行截图:

    testmymath:MYoD.o hex.o ascii.o
         gcc MYoD.o hex.o ascii.o -o testmymath
    MYoD.o:MYoD.c head.h
        gcc -c MYoD.c
    hex.o:hex.c head.h
        gcc -c hex.c
    ascii.o:ascii.c head.h
        gcc -c ascii.c
    

    3.出现的问题:

    在gcc链接库时出现错误。

    通过检查是代码格式出现问题,进过修改即可。

    gcc -shared -fpic -o MYoD.so ascii.c hex.c
    

    第五周作业 内核编译与系统调用(30分)

    https://www.cnblogs.com/20199304lbs/p/12151770.html

  • 相关阅读:
    Git 常用命令大全-转载
    Powershell重命名文件夹
    C#使用qq邮箱发送邮件
    iOS开发-YUV颜色格式
    iOS开发小记(十一)
    iOS开发-AFNetworking
    iOS开发-NSURLSession
    iOS开发-类的加载load函数和initialize函数
    iOS开发-调试(debug)
    iOS开发-graphics
  • 原文地址:https://www.cnblogs.com/20199304lbs/p/11923367.html
Copyright © 2020-2023  润新知