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

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


    课堂实践补充——myod

    实践要求

    1 参考教材第十章内容

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

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

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

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

    6 课上上传代码到码云

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

    image

    第十章内容学习

    Unix I/O

    一个Unix文件就是一个m个字节的序列,所有的I/O设备都被模型化为文件,而所有的输入和输出都被当做对应文件的读和写来执行。

    • 打开文件:一个应用程序通过要求内核打开相应的文件来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,称为描述符,在后续对此文件的所有操作中标识这个文件。Unix外壳创建的每个进程开始时都有三个打开的文件,可以用来代替显式的描述符值。
    • 改变当前的文件位置:对于每个打开的文件,内核保持着一个文件位置k,初始为0。这个文件位置是从文件开头起始的字节偏移量。通过执行seek操作设置文件位置为k。
    • 读写文件:读操作:从文件拷贝n>0个字节到存储器,从当前文件位置k开始,增加到k+n。当k>=文件长度大小时会触发一个称为end-of-file(EOF)的条件。写操作:从存储器拷贝n>0个字节到一个文件,从当前文件位置k开始,然后更新k。
    • 关闭文件:内核释放文件打开时创建的数据结构。

    I/O重定向

    • I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来。
    • dup2函数拷贝描述符表表项oldfd到描述符表项newfd,覆盖描述符表表项newfd以前的内容。如果newfd已经打开,dup2会在拷贝oldfd之前关闭newfd。
    #include <unistd.h>
    
    int dup2(int oldfd,int newfd);
    

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

    本章内容是关于系统及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函数就解决了我的问题。

    掌握两个重要命令:

    • man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用

    • grep -nr XXX /usr/include :查找宏定义,类型定义

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

    • head命令用来查看文件的前几行内容,默认是查看前10行的内容,也可以设置一个数字改变查看行数
    • tail命令用来查看文件的最后几行内容,默认是查看最后10行的内容,同样,也可以设置一个数字改变查看行数

    伪代码

    • head:

    打开文件

    对传入参数进行筛选和转换,参数由字符串转换为整型l。

    依次读取文件中字符c;

    输出字符c;

    得到c为回车时, i++;

    关闭文件

    • tail:

    打开文件

    通过函数lines得到文件行数

    对参数l的转换同head.c

    依次读取字符,读到回车即j++;

    读到j=lines-l时输出读取字符

    关闭文件

    产品代码

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <string.h>
    int main(int argc,char *argv[])
    {
            
    ssize_t read(int fd, void *buf, size_t count);
    int  fd=open(argv[2],O_RDONLY,0);
            int l;
            int i;
            char ch;
            l=atoi(argv[1]);
            for(i=0;i<l;i++)
            {
                    do
                    {
                            ch=read(fd,&ch,buf);
                            putchar(ch);
                    }while(ch!='
    '&&ch!=EOF);
            }
            close(fd);
                  return 0;
    }
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int lines()
    {   
            ssize_t read(int fd, void *buf, size_t count);
            int i=0;
            char ch;
            do
            {
                    ch=read(fd);
                    if(ch=='
    ')
                            i++;
            }while(ch!=EOF);
            close(file);
            printf("%d
    ",i);
            return i;
    }
    
    int main(int argc,char *argv[])
    {
            FILE *fl=open(argv[2],"r");
            int len= lines(fd);
            int j=0;
            int l=atoi(argv[1]);
            char c;
            fl=open(argv[2],"r");
            while(j<len-l)
            {
                    c=read(fd,&ch,buf);
                    if(c=='
    ') j++;
            }
            do
            {
                    c=read(fd,&ch,buf);
                    putchar(c);
            }while(c!=EOF);
    
            close(fd);
            return 0;
    
    }
    

    image

  • 相关阅读:
    java基础-集合笔记
    Spring工具类
    XStream的基本使用
    java之路径问题
    Vue 动态组件渲染问题分析
    watch案例解析(element-ui el-select 无法选中问题剖析)
    v-if案例解析(element-ui form-item 结合 v-if 动态生成rule规则表单元素,表单无法验证问题剖析 )
    Vue 虚拟Dom 及 部分生命周期初探
    Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发"鼻涕"下拉粘连效果
    AngularJs(SPA)单页面SEO以及百度统计应用(下)
  • 原文地址:https://www.cnblogs.com/tyn5304/p/7674944.html
Copyright © 2011-2022 走看看