• myod


    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:显示版本信息
    

    4.代码部分

    ascii.c

    #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("请输入文件名字:");
      scanf("%s",name);
      ascii(name);
      hex(name);
    }
    

    头文件head.h

    #ifndef __HEAD_H__
    #define __HEAD_H__
    void hex(char *name);
    void ascii(char *name);
    #endif
    

    makefile

    1327tzy:ascii.o hex.o myod.o
            gcc -o 1327tzy ascii.o hex.o myod.o 
    ascii.o:ascii.c head.h
            gcc -c ascii.c
    hex.o:hex.c head.h
            gcc -c hex.c
    myod.o:myod.c head.h
            gcc -c myod.c   
    clean:
            rm 1327tzy ascii.o hex.o myod.o
    

    测试文件text.txt

    整体实验流程截图

    5.静态库与动态库的实现

    静态库的实现

    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 myod777 myod.c ./myod.so
    

    6.出现的问题

    (1)在主函数调用ascii函数以及hex时无法成功,显示问题是"implicit declaration of function 'hex' 'ascii'".
    经过网上查询发现存在三种情况第一种是没有把函数所在的c文件生成.o目标文件;第二种是在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明;第三种是其头文件都声明过了,所调用的函数的原型与所传的实参类型不匹配。但是头文件确实都已经进行声明了,最后发现是头文件书写出现了问题,查看笔记发现应当是__HEAD_H__,我前后都少打了两个__。
    参考网站:https://blog.csdn.net/yigedaluobo/article/details/104775533
    (2)链接一静态库出现了问题,现实问题为"undefined reference to"
    上网查询了资料,发现是因为在链接时发现找不到某个函数的实现文件。
    参考网站:https://zhuanlan.zhihu.com/p/24551222

  • 相关阅读:
    Java基础08 继承
    Java基础07 包
    Java基础06 组合
    Java基础05 实施接口
    Java基础04 封装与接口
    Java基础03 构造器与方法重载
    Java基础02 方法与数据成员
    Java基础01 从HelloWorld到面向对象
    151. Reverse Words in a String
    168. Excel Sheet Column Title
  • 原文地址:https://www.cnblogs.com/tzy20191327/p/15321261.html
Copyright © 2020-2023  润新知