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

  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/besti2015/p/7674747.html
Copyright © 2011-2022 走看看