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

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

    课堂实践

    • 1 参考教材第十章内容
    • 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
    • 3 不要把代码都写入main函数中
    • 4 要分模块,不要把代码都写入一个.c中
    • 5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    首先是用man命令学习od

    od命令 :用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

    命令中各选项的含义:

    A 指定地址基数,包括:

    d 十进制

    o 八进制(系统默认值)

    x 十六进制

    n 不打印位移值

    t 指定数据的显示格式,主要的参数有:

    c ASCII字符或反斜杠序列

    d 有符号十进制数

    f 浮点数

    o 八进制(系统默认值为02)

    u 无符号十进制数

    x 十六进制数

    除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数

    head.h :

    #ifndef HEAD_H
    #define HEAD_H
    void od(char a[],int);
    #endif
    

    od.c :

    #include "head.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void od(char a[1000],int len)
    {
    int i,j=0,line=0;
    printf("%06x",line);
    printf("%4c",a[0]);
    for(i=2;i<len+2;i++)
    {
     if(a[i-1]=='
    ')
     {
      printf("  \n");
      continue;
      }
     printf("%4c",a[i-1]);
     if((i%16==0)||(a[i-1]==''))
     { 
     printf("
          ");
     for(j;j<=(i-1);j++)
     printf("  %02x",a[j]);
     line=line+32; 
     printf("
    %06x",line);
     }
    }
    printf("
    "); 
    }
    

    MYod.c :

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include "head.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(int argc,char** argv)  
    { 
      char a[1000];
      int fd,len;
       fd=open(argv[1],O_RDONLY,0);//以只读模式打开文件  
        if(fd==-1)
        {  printf("open file failed!!
    ");
          return 0;}
    	len=read(fd,a,sizeof(a)-1);
        a[len]='';
    	close(fd);
    	od(a,len);
    }  
    

    用gcc *.c命令将这三个代码一起编译,得到可执行文件a.out,然后用./a.out abc命令用来打开abc文件查看结果。

    运行截图:

    od命令对比:

    代码托管

    第十章 系统级I/O

    Unix I/O

    • 打开文件
    • Linux shell创建的每一个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2)。
    • 改变当前的文件位置
    • 读写文件
    • 关闭文件

    文件类型

    • 普通文件:包含任意数据,文本文件是只含有ASCII或Unicode字符的普通文件,二进制文件是所有其他的文件。
    • 目录:包含一组链接的文件,其中每个链接都将一个文件名映射到一个文件,这个文件可能是另一个目录。
    • 套接字:用来与另一个进程进行跨网络通信的文件。
    • 目录层次结构中的位置有两种形式:绝对路径名和相对路径名。

    打开和关闭文件

    • O_RDONLY:只读
    • O_WRONLY:只写
    • O_RDWR:可读可写
    • O_CREAT:如果文件不存在,就创建它的一个截断的空文件。
    • O_TRUNC:如果文件已存在,就截断它。
    • O_APPEND:每次写操作前,设置文件位置到文件的结尾处。

    共享文件

    内核用三个相关的数据结构表示打开的文件

    • 描述符表
    • 文件表
    • v-node表

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

    问题1:ssize_t是什么类型的

    解决:

    在32位系统上 定义为 unsigned int 也就是说在32位系统上是32位无符号整形。在64位系统上定义为 unsigned long 也就是说在64位系统上是64位无符号整形。size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。 它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。所以,它在数组下标和内存管理函数之类的地方广泛使用。而ssize_t这个数据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的。

    代码调试中的问题和解决过程

    问题1:运行读取代码行数的脚本时权限不够

    解决:

    代码托管

    结对及互评

    本周结对学习情况

    20155314刘子健
    - 结对学习内容
    第十章

    感悟

    学习好这章有利于写程序时熟练的进行文件运用。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 50/50 1/1 5/5
    第二周 100/100 1/2 5/10
    第三周 100/200 1/3 5/15

    掌握两个重要命令

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

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

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

    文件:

    用head.c输出前两行,用tail.c输出后三行

    伪代码

    将数组及数组长度传入子函数

    利用循环遍历数组中的前(后)x行

    产品代码:

  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/fixedl/p/7674864.html
Copyright © 2011-2022 走看看