zoukankan      html  css  js  c++  java
  • 20181312 2020-2021-1 《信息安全系统设计与实现(上)》用myod实现Linux下od -tx -tc功能

    20181312 2020-2021-1 《信息安全系统设计与实现(上)》用myod实现Linux下od -tx -tc功能

    我首先查阅了od的功能

    man od
    

    测试od功能

    od -tx hello.txt
    od -tc hello.txt
    od -tc -tx hello.txt
    

    可以看到od -tc是把文件内容一个字符一个字符输出,od -tx是把文件内容的每个字符的十六进制表示输出。

    于是我编写了myod.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(int argv,char *argc[]){
    	FILE *fp;
    	fp=fopen(argc[1],"rb");
    	if(fp==NULL){
    		printf("Failure to open file
    ");
    		return 0;
    	}
    	char ch;
    	char STR[1000];
    	int i,n;
    	i=0;
    	while((ch=fgetc(fp))!=EOF){
    		STR[i]=ch;
    		i++;
    	}
    	STR[i]='';
    	fclose(fp);
    	od(STR,i);
    }
    

    用于打开文件和关闭文件

    调用od.c实现od -tc -tx功能

    #include "head.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void od(char STR[1000], int i)
    {
        int k = 1;
        int j = 0;
        int m = 0;
        int line = 0;
        printf("%06d  ", line);
        putchar(STR[0]);
        for (k = 1; k <= i; k++)
        {
            if (k % 16 != 0 && STR[k] != '')
            {
                if (STR[k] != '
    ')
                {
                    printf("  %2c", STR[k]);
                    continue;
                }
                else
                {
                    printf("  \n");
                    continue;
                }
            }
            else
            {
                printf("
          ");
                for (j = m; j < k; j++)
                {
                    printf("  %02x", STR[j]);
                }
                printf("
    %06d", k + 2);
                m = k;
            }
        }
        printf("
    ");
    }
    

    head.h

    #ifndef HEAD_H
    #define HEAD_H
    void od(char STR[],int);
    #endif
    

    makefile

    myod: ./src/myod.c ./src/od.c ./include/head.h
    	gcc ./src/myod.c ./src/od.c -Iinclude -o ./bin/myod
    

    过程中我遇到的主要问题就是od.c输出字符到屏幕时无法像od本身对齐的那样,我不断修改输出时的空格与换行,但是目前呈现的也没能做到100%还原。

  • 相关阅读:
    简单图片预加载
    前端进行图片压缩
    原生js实现拖动滑块验证
    chrome和IE下的滚动条样式修改
    简单canvas刮刮乐
    时间轴
    简单边框动画
    滚动指示器
    美化checkbox多选框
    将过长的文字改用省略号显示
  • 原文地址:https://www.cnblogs.com/blingblingXY/p/13799837.html
Copyright © 2011-2022 走看看