zoukankan      html  css  js  c++  java
  • C语言实现Linux下od -tx -tc XXX的功能

    环境:OpenEuler21.03+Vscode+gcc+cgdb

    1 任务详情

    1. 复习c文件处理内容

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

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

    4. 编写Makefile

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

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

    2 功能分析

    2.1 od说明

    1. 功能

      od命令用于输出文件的八进制、十六进制或其它格式编码的字节,通常用于显示或查看文件中不能直接显示在终端的字符。

    2. 使用格式

      od [<选项><参数>] [<文件名>]

    3. 选项

      -a:此参数的效果和同时指定“-ta”参数相同;
      -A:<字码基数>:选择以何种基数计算字码;
      -b:此参数的效果和同时指定“-toC”参数相同;
      -c:此参数的效果和同时指定“-tC”参数相同;
      -d:此参数的效果和同时指定“-tu2”参数相同;
      -f:此参数的效果和同时指定“-tfF”参数相同;
      -h:此参数的效果和同时指定“-tx2”参数相同;
      -i:此参数的效果和同时指定“-td2”参数相同;
      -j<字符数目>或--skip-bytes=<字符数目>:略过设置的字符数目;
      -l:此参数的效果和同时指定“-td4”参数相同;
      -N<字符数目>或--read-bytes=<字符数目>:到设置的字符树目为止;
      -o:此参数的效果和同时指定“-to2”参数相同;
      -s<字符串字符数>或--strings=<字符串字符数>:只显示符合指定的字符数目的字符串;
      -t<输出格式>或--format=<输出格式>:设置输出格式;
      -v或--output-duplicates:输出时不省略重复的数据;
      -w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数;
      -x:此参数的效果和同时指定“-h”参数相同;
      --help:在线帮助;
      --version:显示版本信息。

    4. od -tx -tcOpenEuler下的运行效果

    截图

    2.2 需求分析

    由上述功能描述可以得出需求:

    1. 支持命令行调用,并通过传参方式读取目标文件

    2. 每行数字开头前7位为为当前读取到字符数的八进制表示

    3. 每行读取16个字符,每个字符转化为两位的十六进制数,每四个字符作为一组输出。每输出一行文件内容的十六进制表示,下一行紧接着输出对应的ASCII字符。

    4. 全部文本内容输出结束后,输出“ ”的十六进制表示以及对应的ASCII字符

    3 编写代码

    代码见Gitee

    运行效果如下:

    截图

    4 编写makefile&制作动态库和静态库

    makefile内容如下:

    staticMyOD: main.o tc.o tx.o
    	gcc lib/main.o lib/tc.o lib/tx.o -o bin/staticMyOD
    main.o: src/main.c include/head.h
    	gcc -c src/main.c -Iinclude -o lib/main.o
    tc.o: src/tc.c include/head.h 
    	gcc -c src/tc.c -Iinclude -o lib/tc.o
    tx.o: src/tx.c include/head.h
    	gcc -c src/tx.c -Iinclude -o lib/tx.o
    
    
    dllMyOD: src/main.c libMyOD.so include/head.h
    	gcc -Iinclude -Llib -lMyOD src/main.c -o bin/dllMyOD
    libMyOD.so: dlltx.o dlltc.o
    	gcc -shared -o lib/libMyOD.so lib/dlltx.o lib/dlltc.o 
    dlltc.o: src/tc.c include/head.h
    	gcc -c -fPIC -Iinclude src/tc.c -o lib/dlltc.o
    dlltx.o: src/tx.c include/head.h
    	gcc -c -fPIC -Iinclude src/tx.c -o lib/dlltx.o
    
    
    clean:
    	rm lib/*
    	rm bin/*
    
    
    static: staticMyOD
    dll: dllMyOD
    all: dllMyOD staticMyOD
    

    通过makefile制作静态库和动态库,完成后项目目录如下:

    截图

    5 遇到的问题

    1. 格式无法对齐
      • 已解决
      • 解决办法:对照od输出,逐步调整,最终达到目的
  • 相关阅读:
    Hadoop学习笔记(1) ——菜鸟入门
    自己动手做个智能小车(8)[终]
    自己动手做个智能小车(7)
    自己动手做个智能小车(6)
    CSS动画
    smarty的缓冲
    smarty模板
    修改登录密码
    登录验证码
    phpcms
  • 原文地址:https://www.cnblogs.com/lxy2019/p/15339902.html
Copyright © 2011-2022 走看看