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


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

    Myod系统版本调用:

    1、参考教材第十章内容

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

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

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

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

    实现截图:

    核心代码:

    #include <sys/types.h>
    
    #include <sys/stat.h>
    
    #include <fcntl.h>
    
    #include <stdio.h>
    
    #include <unistd.h>
    
    
    
    void main(int argc,char *argv[])
    
    {
    
        int m,n;
    
        m=open(argv[1],O_RDONLY,0);
    
        if(m==-1)
    
        printf("not found");
    
        zhuanhuan(m);
    
        n=close(m);
    
        if(n==-1)
    
        printf("文件关闭失败");
    
    void zhuanhuan(int m)
    {
        char temp;
        while(read(m,&temp,1)!=0)
            {
                if(temp=='
    ')
                    printf("
    ");
                    else
                    {
                        printf("%x ",temp);
                    }
            }
    }
    }
    
    

    实现过程:
    进程通过调用open函数来打开一个已存在的文件。
    O_PDONLY只读,O_WRONLY只写,O_RDWR可读可写。
    核心代码为fd=open("xxx.txt",O_RDONLY,0)

    教材学习内容总结

    一、Unix I/O

    Linux提供少量基于Unix I/O模型系统级函数,它们允许应用程序打开、关闭、读和写文件,提取文件的元数据。

    二、打开和关闭文件

    进程通过调用open函数来打开一个已存在的文件。

    函数头为:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    

    O_PDONLY只读,O_WRONLY只写,O_RDWR可读可写。

    核心代码为fd=open("xxx.txt",O_RDONLY,0)

    小结

    1、Linux系统的读和写操作会出现不足值,应用程序必须能正确地预计和处理这种情况。应用程序不应直接调用Unix I/O函数,而应使用RIO包,RIO包通过反复执行读写操作,直到传送完所有的请求数据,自动处理不足值。

    2、Linux内核使用三个相关的数据结构来表示打开的文件。

    3、标准I/O库是基于Unix I/O实现的,并提供一组强大的高级I/O例程。对于大多数应用程序而言,标准I/O更简单,是优于Unix I/O的选择。

    教材学习中的问题和解决过程

    • 问题1:不明白元数据的定义。

    • 问题1解决方案:
      主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。

    • 问题2:对于标准I/O理解不够透彻。

    • 问题2解决方案:未解决,希望老师上课可以进行相应的讲解。

    head tail的使用

    API分析:head 数字 文件名,查看文件前X行。

    伪代码:

    打开两个文件
    读取输入的数字和文件
    读取文件时,一旦字符为换行符,计数器+1
    输出文件内容
    当计数器的值等于读入的数字时,break退出循环
    关闭文件

    核心代码:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    void main(int argc,char *argv[])
    {
        int count=0,m,n,x;
        char temp;
        x=atoi(argv[1]);//字符型转换整形,命令行读取
        m=open(argv[2],O_RDONLY,0);
        if(m==-1)
            printf("not found");
        while(read(m,&temp,1)!=0)
        {
            if(temp=='
    ')
            {
                count++;
                if(count==x)
                {
                    break;
                }
                else
                    printf("%c",temp);
            }
            else
                printf("%c",temp);
        }
        printf("
    ");
        n=close(m);
        if(n==-1)
            printf("文件关闭失败");
    }
    

    运行截图:

    tail

    伪代码:
    打开两个文件
    读取输入的数字和文件
    读取文件时,一旦字符为换行符,计数器+1
    关闭文件
    x=计数器统计数,令计数器为0
    打开文件
    当计数器>=x时
    输出文件内容
    关闭文件

    核心代码:

    #include <sys/types.h>
    
    #include <sys/stat.h>
    
    #include <fcntl.h>
    
    #include <unistd.h>
    
    #include <stdio.h>
    
    #include <stdlib.h>
    
    
    
    void main(int argc,char *argv[])
    
    {
    
        int count=0,m,n,x;
    
        char temp;
    
        x=atoi(argv[1]);//字符型转换整形,命令行读取
    
        m=open(argv[2],O_RDONLY,0);
    
        if(m==-1)
    
            printf("not found");
    
        while(read(m,&temp,1)!=0)
    
        {
    
            if(temp=='
    ')
    
            {
    
                count++;
    
            }
    
        }
    
        x=count-x;
    
        count=0;
    
        n=close(m);
    
        if(n==-1)
    
            printf("文件关闭失败");
    
        m=open(argv[2],O_RDONLY,0);
    
        if(m==-1)
    
            printf("not found");
    
        while(read(m,&temp,1)!=0)
    
        {
    
            if(temp=='
    ')
    
            {
    
                count++;
    
            }
    
            if(count>=x)
    
            {
    
                printf("%c",temp);
    
            }
    
        }
    
        printf("
    ");
    
        n=close(m);
    
        if(n==-1)
    
            printf("文件关闭失败");
    
    }
    

    运行截图:

    代码托管

    结对及互评

    点评模板:

    • 博客中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 代码中值得学习的或问题:
      • xxx
      • xxx
      • ...
    • 其他

    本周结对学习情况

    - [结对同学学号1](博客链接)
    - 结对照片
    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

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

    1、Linux系统下的C源文件的处理方式比windows下的要更加丰富。

    2、关于计算机语言中的各种运算仍需要加深理解。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第三周 114/114 3/3 20/20
    第四周 136/250 2/5 18/38
    第五周 500/1000 3/7 22/60
    第六周 300/1300 2/9 30/90

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

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

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    SVN中Revert changes from this revision 跟Revert to this revision
    bootstrap中如何使input中的小图标获得点击事件
    基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版
    MVC4 Controller 与 WebApi 的 Session 传值问
    MVC Razor与javascript混编(js中嵌入razor)
    Asp.net mvc怎么在razor里写js代码
    MVC后台数据赋值给前端JS对象
    ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)
    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
    【记录】【solr】solr7.2.1原子更新
  • 原文地址:https://www.cnblogs.com/LeeX1997/p/7672963.html
Copyright © 2020-2023  润新知