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行

    产品代码:

  • 相关阅读:
    C#获取网页内容的三种方式
    C#,COM口,接收,发送数据
    mysql查询当前正在使用数据库
    错误日志中关于innodb的问题收集
    Oracle10g下载地址--多平台下的32位和64位
    Linux-PAM认证模块
    kali安装vmware tools
    redis数据库
    mysql的innodb中事务日志ib_logfile
    MySQL数据故障时备份与恢复
  • 原文地址:https://www.cnblogs.com/fixedl/p/7674864.html
Copyright © 2011-2022 走看看