zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155336 《信息安全系统设计基础》第四周学习总结

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

    本周目标:

    • 补充完成课上没有完成的内容(2分)

    • 学习教材附录A,第十章内容

    • 参考别出心裁的Linux系统调用学习法,学习视频,掌握两个重要命令:

        man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
        grep -nr XXX /usr/include :查找宏定义,类型定义
      
    • 完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写(3分)

    myod-系统调用版本

    1. 参考教材第十章内容

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

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

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

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

    代码:

    main:

    #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);
                }
        }
    }
    

    ASCII

    #include<stdio.h>
    void ascii(char args[],int j)
    {
    int i;
    printf("%07o",16*j);
    j++;
    for(i=0;args[i]!='';i++)
    {
    if(args[i]=='
    ')
    	printf("%x",'
    ');
        printf("%4x",args[i]);
    }
    printf("
    ");
    }
    

    h

    #include<stdio.h>
    void hex(char args[])
    {
    int i;	
    printf("       ");
    for(i=0;args[i]!='';i++)
    {
    	if(args[i]=='
    ')
                	printf("\n");
    	else
       			 printf("%4c",args[i]);
    }
    printf("
    ");
    }
    

    教材学习内容总结

    • 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程。 输入操作:从I/O设备拷贝数据到主存、输出操作:从主存拷贝数据到I/O设备

    • Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行。

      • 打开文件:标准输入描述符为0、标准输出描述符为1、标准错误描述符为2.
      • 改变当前的文件位置:文件位置是从文件开头起始的字节偏移量。
      • 读写文件:从当前文件位置开始。当大于文件长度的时候出发EOF条件。
      • 关闭文件。
    • open函数int open(char *filename,int flags,mode_t mode);

      • flages参数指明进程打算如何访问该文件O_RDONLY:只读、O_WRONLY:只写、O_RDWR:可读可写``O_CREAT:如果文件不存在就创建一个截断的(空)文件、O_TRUNC:如果文件已经存在,就截断它。、O_APPEND:每次写操作前,设置文件位置到文件的结尾处。

      • mode参数指定新文件的访问权限位,每个进程都有一个umask,是通过调用umask函数来设置的。当进程通过带某个mode参数的open函数调用来创建一个新文件时,文件的访问权限位被设置为mode & ~umask

        • 进程通过调用close函数关闭一个打开的文件:int close(int fd);
      • read函数:从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf,返回值-1表示错误,返回值0表示EOF。

        • read和write传送的字节一般比应用程序要求的少,不足值产生的情况有:

        • 读时遇到EOF

        • 从终端读文本行

        • 读和写网络套接字

        • RIO包可自动处理不足值。 ssize_t rio_readn(int fd,void *usrbuf,size_t n);

        • 无缓冲的输入输出函数:直接在存储器和文件之间传送数据。

        • 带缓冲的输入函数:允许从文件中读取文本行和二进制数据,文件内容缓存在应用级缓冲区内。

      • 应用程序通过调用statint stat(const char *filename,struct stat *buf);和fststint fstat(int fd,struct stat *buf);

      • 函数检索关于文件的信息。

    两个重要的命令

    • man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
    • grep -nr XXX /usr/include:查找宏定义,类型定义

    完成head,tail的使用,相关API的分析,伪代码,产品代码,测试代码的编写

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

    man  head 
    man  tail 
    man read
    


    head命令

    1.命令格式:

    head [参数]... [文件]...

    2.命令功能:

    head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

    3.命令参数:

    -q 隐藏文件名
    
    -v 显示文件名
    
    -c<字节> 显示字节数
    
    -n<行数> 显示的行数
    

    tail命令

    1.命令格式:

    tail [  -f ] [  -c Number |  -n Number |  -m Number |  -b Number |  -k Number ] [ File ]tail [  -f ] [  -c 
    
    Number |  -n Number |  -m Number |  -b Number |  -k Number ] [ File ]
    

    以逆序显示行:

    tail [  -r ] [  -n Number ] [ File ]
    

    2.命令功能:

    用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

    3.命令参数:

    -f 循环读取
    
    -q 不显示处理信息
    
    -v 显示详细的处理信息
    
    -c<数目> 显示的字节数
    
    -n<行数> 显示行数
    
    --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束. 
    
    -q, --quiet, --silent 从不输出给出文件名的首部 
    
    -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒 
    

    问题和解决过程

    本章内容是关于系统及I/O的知识点,在之前几章的学习都有所接触问题总的不大,但是在10.2中关于打开和关闭文件的open函数中的第三个参
    
    数的使用存在问题。书上p597写了一个例子,文件的拥有者有读写权限,而其他的用户都有读权限。而答案为什么给出的是umask(DEF _ 
    
    UMASK);fd = Open("foo.txt",O _CREATE|O _TRUNC|O _WRONLY,DEF _MODE);给出的O _WRONLY是只读,而并不是读写操作,是如何
    
    完成的读写操作?而其也具体的权限参数是什么?根据上面的解释知道是Open函数的第二个flags参数是指明了进程打算如何访问这个文件,第
    
    三个mode _t mode参数是指明文件的访问权限,结合图10—1会知道具体的访问权限。后来通过看书,发现自己忽略掉了一点就是每个进程都有
    
    一个umask,它是通过调用umask函数来设置的。这样以来之前对于这个答案有所定义给定了mode和umask默认值: #define DEF _MODE S 
    
    _IRUSR|S _IWUSR|S _IRGRP|S _ IWGRP|S _IROTH|S _IWOTH #define DEF _UMASK S _IWGRP|S _IWOTH,这样在结合之前的Open函
    
    数就解决了我的问题。
    

    代码托管

    结对及互评

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

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

    学习进度条

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

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

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

    • 计划学习时间:10小时

    • 实际学习时间:10小时

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

    参考资料

  • 相关阅读:
    win7下的vxworks总结
    ubuntu 无法获得锁 /var/lib/dpkg/lock
    项目中用到了的一些批处理文件
    win7下安装 WINDRIVER.TORNADO.V2.2.FOR.ARM
    使用opencv统计视频库的总时长
    January 05th, 2018 Week 01st Friday
    January 04th, 2018 Week 01st Thursday
    January 03rd, 2018 Week 01st Wednesday
    January 02nd, 2018 Week 01st Tuesday
    January 01st, 2018 Week 01st Monday
  • 原文地址:https://www.cnblogs.com/hxl681207/p/7988771.html
Copyright © 2011-2022 走看看