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


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

    课上实践--myod-系统调用版本【已完成】

    代码链接
    运行截图如下:截图内有部分关键代码

    •要求:

    1.参考教材第十章内容

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

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

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

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

    6.课上上传代码到码云

    head/tail的使用

    head/tail是linux中常见的文本选取命令,用以选取头部/尾部的若干行文本。

    • 使用命令查看帮助文档如下:
    man -k head | grep 1
    man -k tail | grep 1
    

    • 通过man命令看head,tail的具体详细使用方法,以及之后编写产品代码需要read函数的头文件等信息都可以在这里找到:
    man  head 
    man  tail 
    man read
    

    • 直接使用命令进行验证,head输出文档前十行,tail输出文档的后十行:

    命令格式:

    通过上述帮助文档,可以得出不加选项的情况下默认输出头部的10行文本。使用-n选项搭配数字可以指定需要输出的文本行数量,其中若number为负数时表示输出前面所有的行,但不包括最后的|number|行。

    head -n number filename  
    

    和head基本相似,但是表示输出末尾的文本。另外一个区别是number如果带+号表示输出末尾的所有文本,但不包括前number-1行。

    tail -n number filename 
    

    编程实现:

    head伪代码:

    {
        打开文件;
        以循环的形式读入文件;
        读入换行符,则计数器加一;
        读入10行则停止输出;
        关闭文件;
        程序结束。
    }
    

    head产品代码:

    #include <sys/types.h>
    
    #include <sys/stat.h>
    
    #include <fcntl.h>
    
    #include <stdio.h>
    
    #include <unistd.h>
    
    
    
    int main(int argc,char *argv[])
    
    {
    
    
    
        int f,i=0;
    
        char ch;
    
        f=open(argv[1],O_RDONLY,0);
    
        if(f==-1)
    
        {
    
            printf("error!");
    
           
    
    
    
    } 
    
        while(read(f,&ch,1)!=0)
    
        {
    
            printf("%c",ch);
    
            if(ch=='
    ') i++;
    
            if(i==10) break;
    
        }
    
        close(f);
    
        exit(0);
    
    }
    

    head运行截图:

    tail伪代码:

    {
        打开文件;
        以循环的形式读入文件;
        计算文件总行数;
        读入换行符,则计数器加一;
        从后向前,读入10行则停止输出;
        关闭文件;
        程序结束。
    }
    

    tail产品代码:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <unistd.h>
    
    int main(int argc,char *argv[])
    {
    
        int f,f2,i=0,j;
        char ch;
        int len;
        f=open(argv[1],O_RDONLY,0);
        if(f==-1)
        {
            printf("error!");
    exit(0);
    } 
        while(read(f,&ch,1)!=0)
        {
           // printf("%c",ch);
            if(ch=='
    ') i++;
       
        }
    	close(f);
     f2=open(argv[1],O_RDONLY,0);
     while(read(f,&ch,1)!=0)
        {
            
            if(ch=='
    ') j++;
    	if(j>=i-10) 
    	printf("%c",ch);
    
        }
    
        close(f2);
    
        exit(0);
    }
    

    tail运行截图:

    代码链接

    代码中遇到的问题:

    • 问题一:
      在编译head.c时遇到如下问题提示:

    • 解决:通过百度,该英文提示的意思是:括号不匹配。重新 vi head.c 发现自己少了一个大括号。

    • 问题二:
      在运行tail.c时,发现自己明明在代码中进行了行数控制,但输出的却还是整个文档的内容。

    • 解决:我从头到尾检查了代码,感觉没有错误。然后我把行数控制修改到5,结果输出的还是整个文档,这说明行数控制不起效果。后来恍然大悟计数是一个文件,后面输出应该是另外是另外的文件。重新读取新一个文件,再进行换行符计数,输出文档。

    其他(感悟、思考等,可选)

    有一点关于代码的感悟,在编代码时,我正在苦恼于怎么计数,找到的计数函数总是出错。我的搭档提醒我可以先整个文档读一遍来计数,然后再读取输出。我觉得这个方法很好,而且工作量减小,同一段代码多次使用,所以我感觉一起学习感觉很好,省时高效,互相帮助!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 20/20 1/2 10/15 第一章
    第三周 130/210 1/2 21/36 第二章
    第四周 70/ 280 1/3 10/46 第十章

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    参考资料

  • 相关阅读:
    Windows——bat中的路径和工具栏运行bat的坑
    KBE——查询
    KBE实践——登录案例
    KBE_运作流程
    KBE_创建项目和基本常识
    python_面向对象
    程序员常见面试之 数据库 知识点小结(三)
    C#编程总结
    人人必知的10个 jQuery 小技巧
    Javascript生成二维码(QR)
  • 原文地址:https://www.cnblogs.com/0831j/p/7674764.html
Copyright © 2020-2023  润新知