• 2017-2018-1 20155332 《信息安全系统设计基础》第四周学习总结


    2017-2018-1 20155332 《信息安全系统设计基础》第四周学习总结

    课堂实践项目——myod第二版(系统功能调用)

    任务要求

    1 参考教材第十章内容

    2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名

    3 不要把代码都写入main函数中

    4 要分模块,不要把代码都写入一个.c中

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

    6 课上上传代码到码云

    码云链接-od-system

    解决过程

    上周就做过myod的程序,这次只用把打开文件,读取文件,关闭文件的命令全部换成系统命令即可,并不困难。

    • FILE *file=fopen(argv[3],"r")——int fd=open(argv[3],O_RDONLY,0);;
    • fgets(ch,17,file)——read(fd,&ch,BUFFERSIZE)
    • fclose(file)——改为close(fd);
    #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++;
    
        }
    }
    
    

    学习两条重要命令

    man -k head | grep file| grep 2
    grep -nr O_RDONLY /usr/include

    myhead/mytail码云链接

    https://gitee.com/bestiisjava2017/laura5332/commit/6f2c00fa96b049cec64548a97c6150a6b6e828d2

    完成head,tail的使用


    自己实现

    • head命令是打印一个文件的前十行内容
    • tail命令是打印一个文件的后十行内容
    • 实现时,先打开一个文件,再用读取文件内容。
    • head从前往后,读10个换行符,结束,然后输出每行的内容
    • tail从后往前,读取10个换行符,结束,然后输出每行的内容
    • 关闭文件
      myhead

    mytail

  • 相关阅读:
    BestCoder Round #65 hdu5590(水题)
    codeforces Ebony and Ivory(水题)
    codeforces 630B Moore's Law
    BestCoder Round #69 (div.2)(hdu5611)
    BestCoder Round #73 (div.2)(hdu 5630)
    codeforces 630A Again Twenty Five!
    codeforces 630C Lucky Numbers
    codeforces 630D Hexagons!
    Codeforces243C-Colorado Potato Beetle(离散化+bfs)
    hdu4453-Looploop(伸展树)
  • 原文地址:https://www.cnblogs.com/besti2015/p/7674747.html
Copyright © 2020-2023  润新知