2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

课堂提交题目要求

编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能

代码码云链接补交

  • 源代码main函数
#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include"head.h"


int main(int argc,char *argv[])
{

    int i;
    int n1=0,n2=0,n3=0,n4=0;
    for(i=1;i<argc-1;i++)
    {
        switch(argv[i][2])
        {
            case 'c':n1=1;break;
            case 'x':n2=1;break;
            case 'd':n3=1;break;
            case 'o':n4=1;break;
        }
    }
    int fd=10;
    fd=open(argv[argc-1],O_RDONLY,0);  
//printf("%d",fd);

    if(fd==-1){printf("Error!\n");exit(1);}

    myod(fd,n1,n2,n3,n4);
    close(fd);
    return 0;
}
  • 源代码myod.c
#include<stdio.h>
#include<unistd.h>
void myod(int fd,int n1,int n2,int n3,int n4)
{
    char ch,line[16];
    int i;
    int a=0;
    int j=0;
    while(read(fd,&ch,1)!=0){
        line[j%16]=ch;
	if((j+1)%16==0){
        printf("%07o  ",16*a);
a++;
        if(n1){for(i=0;i<16;i++)
        {
            if(line[i]=='\n')
            {printf("%5s","\\n");continue;}
	    if(line[i]=='\t')
            {printf("%5s","\\t");continue;}
            putchar(line[i]);
            putchar(' ');
            putchar(' ');
            putchar(' ');
            putchar(' ');
        }
        putchar('\n');}
        if(n2){printf("         ");for(i=0;i<16;i++)
        {
            
            if(line[i]=='\n')
            {printf("0%-4x",'\n');continue;}
	    if(line[i]=='\t')
            {printf("0%-4x",'\t');continue;}
            printf("%-5x",line[i]);
        }
        putchar('\n');
        }

        if(n3){printf("        ");for(i=0;i<16;i++)
        {

            if(line[i]=='\n')
            {printf("%-5d",'\n');continue;}
	    if(line[i]=='\t')
            {printf("%-5d",'\t');continue;}
            printf("%-5d",line[i]);
        }
        putchar('\n');
        }
        if(n4){printf("       ");for(i=0;i<16;i++)
        {
            if(line[i]=='\n')
            {printf("%-5o",'\n');continue;}
	    if(line[i]=='\t')
            {printf("%-5o",'\t');continue;}
            printf("%-5o",line[i]);
        }
        putchar('\n');
        }
	}
	j++;

    }
}

课堂题目理解

  • od的功能(参考Linux od命令详细介绍及用法实例):
    od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
    选项-t:指定输出格式,格式包括a、c、d、f、o、u和x。

  • od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)截图如下:

  • od -tx -tc XXX就是在十六进制输出其ascii值的同时,显示对应的文件内容,-tx和-tc的前后顺序决定了文本内容和十六进制ascii值的上下顺序。截图如下:

  • od -tc -tx1 XXX是每列输出一个字节,打印文件内容和对应的十六进制ascii值(题目要求理解后编写MyOD实现此功能)。截图及和上面功能对比如下:

题目截图

posted @ 2017-12-07 17:08  qiaolei  阅读(281)  评论(0编辑  收藏  举报