zoukankan      html  css  js  c++  java
  • 20181332BYB-MyOD实验

    MyOD实验

    一、实验要求

      1. 复习c文件处理内容;

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

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

      4. 编写Makefile;

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

    二、实验原理

    **od命令**
    
    1. 功能
    
    od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
    
    常见的文件为文本文件和二进制文件。od命令主要用来查看保存在二进制文件中的值,按照指定格式解释文件中的数据并输出。
    
    2. 命令格式
    od [<选项><参数>] [<文件名>]
    
    3. 命令选项
    * -t<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字节。在默认条件下,以四个字节为一组输出。
    
    **文件**
    
    1. 文件:能够存储数据的存储设备,文件其实是一系列的字节。文件通常存储到硬盘上。
    
    2. 文件中的位置:文件有开头和结尾,还有一个当前位置,通常定义为从文件头到当前位置有多少个字节。
    
    3. 文件流:流是外部数据或数据目的地的抽象表示,所以键盘、显示器上的命令行和磁盘文件都是流。
    
    4. 文件访问:
    
    打开文件:fopen() 
    FILE *fopen(const char *name,const char *mode);
    
    * 第一个变元是字符串指针,它是要处理的外部文件名称,它包含了文件名称字符串的地址。第二个变元也是一个字符串,称为文件模式,它指定对文件进行什么处理。
    
    关闭文件:fclose() 
    fclose( FILE *fp );
    
    * 返回值:如果成功关闭文件,就返回0,否则返回EOF。
    
    写入文本文件:fputc()——将一个字符写入文本文件
    fputc(int ch,FILE *pfile);
    
    * 参数:将第一个变元指定的字符写入第二个变元(文件指针)指定的文件中。
    
    * 返回值:如果操作成功,就返回写入的字符,否则返回EOF
    
    读取文本文件:fgetc()
    int mchar = fgetc(pfile);
    
    * fgetc()函数从打开的文本文件中读取一个字符。它将文件指针作为唯一的变元,把读取的字符返回int类型。
    
    * 返回值:mchar变量int类型,因为如果到达文件尾,就返回EOF。
    

    三、实验步骤及过程

    代码部分:

    主函数myod.c:
    
    #include "head.h"
    #include <stdio.h>
    #include <string.h>
    void main()
    {
            char name[50];
            strcpy(name,"text.txt");
            ascii(name);
            hex(name);
    }
    
    转换 ASCII 码的函数 ascii.c :
    
    #include "head.h"
    #include <stdio.h>
    #include <string.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>
    #include <string.h>
    void hex(char *name)
    {
            FILE *fp;
            char ch;
            printf("out the hex:
    ");
            fp=fopen(name,"r");
            ch=fgetc(fp);
            while(ch!=EOF)
            {
                    if(ch=='
    ')
                            printf("
    ");
                    else
                            printf("%4x",ch);
                    ch=fgetc(fp);
            }
            fclose(fp);
    }
    
    头文件head.h:
    
    void hex(char *name);
    void ascii(char *name);
    

    文本文件test.txt:

    hello 20181332 baiyunbang!
    

    makefile:
    myodl: main.o ascii.o hex.o
    gcc main.o ascii.o hex.o -o myodmain.o: main.c gcc -c main.c ascii.o: ascii.c gcc -c ascii.c hex.o: hex.c gcc -c hex.c`

    实验过程及截图:

    (1)新建想要输出的txt文件;

    (2)编写实现代码;

    主函数myod.c:
    

    头文件head.h:
    

    转换 ASCII 码的函数 ascii.c :
    

    转换十六进制码的函数hex.c
    

    (3)静态库实现过程:

    (4)动态库实现过程:

    (5)makeflie实现过程:

    四、实验中遇到的问题及解决方法

    1. C语言代码的编写较为困难,通过学习有关文件的博客、翻书、百度的方法解决。
    
    2. 在ascii.c中有'/n'输入成"/n"多次编译出错,反复检查后才发现问题。
    
    3. 在编译过程中老是出现段错误:
    

    五、实验心得体会

    1. 本次实验难度较高,花费大量时间研究如何做出来。
    
    2. C语言部分代码的实现方法已经忘记,只能重新学习写文件的方法......复习真的很重要!!!!
    
    3. 学会了op命令的使用,可以将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示。
    
    • 参考资料:
    1. Linux下的od命令

    2. C语言文件处理

    3. ASCII码转换表

  • 相关阅读:
    Manacher-模版题poj3974 hdu3068
    拓展kmp(带注释版)
    颓の第17周
    php 递归遍历目录带缩进
    php 递归遍历目录
    php session
    apache主机配置
    php环境配置的检测方法
    php 变量
    php MVC
  • 原文地址:https://www.cnblogs.com/baiyun-0722/p/13799032.html
Copyright © 2011-2022 走看看