MyOD(选做)

MYOD(选做)

Linux中的od命令用于输出文件内容,本次作业所做即通过自己编写的C语言代码实现od命令的输出,包括ASCII码与16进制的输出格式

1.首先直接创建了myod.txt文件,内容为随意选取的一些名言

Life is but a span
Fact is stranger than fiction
Man proposes,God disposes

直接进行od的tx,tc操作后结果如图:

2.经过多次调试与修改,最终使用的代码如下:

1.头文件myodhead.h

#ifndef __MYODHEAD_H__
#define __MYODHEAD_H__
#define N 999
#define M 17

void tc(char args[]);
void tx(char args[],int j);

#endif

2.main.c

#include "myodhead.h"
#include<stdio.h>
#include<stdlib.h>

int main()
{
    FILE *fp;
    char args[N],name[N],ch;
    int i=0;
    printf("input file name:\n");
    scanf("%s",name);
    if((fp=fopen(name,"r"))==NULL){
        printf("ERROR!");
        exit(0);
    }
    while(fgets(args,M,fp)){
        tx(args,i++);
        tc(args);
    }
    fclose(fp);
 }

3.tx.c

#include "myodhead.h"
#include<stdio.h>
void tx(char args[],int j)
{
    int i;
    char output[N];
    printf("%07o",16*j);
    j++;
    for(i=0;args[i]!='\0';i++)
    {
        if(args[i]=='\n')
            output[i]='\n';
        else
            output[i]=args[i];
    }
for(i=0;args[i]!='\0';i=i+4)
{
    printf("%x%x%x%x",output[i+3],output[i+2],output[i+1],output[i]);
}
printf("\n");
}

4.tc.c

#include "myodhead.h"
#include <stdio.h>
void tc(char args[]){
    int i;
    printf("      ");
    for(i=0;args[i]!='\0';i++)
    {
        if(args[i]=='\n')
           printf("\\n");
        else
           printf("%4c",args[i]);
    }
   printf("\n");
}

在这里的运行文件共创建了三个,主函数主要用于文件的读取与使用,tx.c与tc.c分别用于进行相应转化操作,分别将主函数中读取的文本文件转化为16进制数与ASCII码

3.最终经过编译,实现结果为

4.编写makefile完成动态库、静态库的创建


最终结果如图:

5.问题与解答

实验过程没有遇到太多问题,除开代码的调试以外,最大的问题在于makefie的编写过程中总是出现一些小问题,例如libs文件夹在Makefile文件中打印成了lib,另外由于此次使用的文件不仅仅是一个,因此打包时也在犹豫究竟是将三个文件都写在一条指令中还是分开写三条命令,最终都解决了。

posted @ 2021-09-26 22:29  20191303姜淳译  阅读(57)  评论(0)    收藏  举报