zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Codeforces 798C. Mike and gcd problem 模拟构造 数组gcd大于1
    Codeforces 796C. Bank Hacking
    Codeforces 792B. Counting-out Rhyme
    gym 101164 H.Pub crawl 凸包
    hdu 6053 TrickGCD 筛法
    hdu 6041 I Curse Myself 无向图找环+优先队列
    bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
    codeforces gym 101164 K Cutting 字符串hash
    树链剖分求lca
    UESTC 1697 简单GCD问题(一) 筛法
  • 原文地址:https://www.cnblogs.com/besti2015/p/7674747.html
Copyright © 2011-2022 走看看