zoukankan      html  css  js  c++  java
  • 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!
    ");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]=='
    ')
                {printf("%5s","\n");continue;}
    	    if(line[i]=='	')
                {printf("%5s","\t");continue;}
                putchar(line[i]);
                putchar(' ');
                putchar(' ');
                putchar(' ');
                putchar(' ');
            }
            putchar('
    ');}
            if(n2){printf("         ");for(i=0;i<16;i++)
            {
                
                if(line[i]=='
    ')
                {printf("0%-4x",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("0%-4x",'	');continue;}
                printf("%-5x",line[i]);
            }
            putchar('
    ');
            }
    
            if(n3){printf("        ");for(i=0;i<16;i++)
            {
    
                if(line[i]=='
    ')
                {printf("%-5d",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("%-5d",'	');continue;}
                printf("%-5d",line[i]);
            }
            putchar('
    ');
            }
            if(n4){printf("       ");for(i=0;i<16;i++)
            {
                if(line[i]=='
    ')
                {printf("%-5o",'
    ');continue;}
    	    if(line[i]=='	')
                {printf("%-5o",'	');continue;}
                printf("%-5o",line[i]);
            }
            putchar('
    ');
            }
    	}
    	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实现此功能)。截图及和上面功能对比如下:

    题目截图

  • 相关阅读:
    with check option(视图 )
    @@ERROR
    事务处理
    含有自增序列的表中使用truncate与delete的不同结果
    Oracle中的通配符
    Java方法重载
    java递归方法
    Oracle中的for语句
    Uboot 2014.07 makefile分析
    linux内核目录结构
  • 原文地址:https://www.cnblogs.com/20155305ql/p/7999948.html
Copyright © 2011-2022 走看看