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

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

    项目一:课堂提交补充

    1 参考教材第十章内容

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

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

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

    运行截图:

    标准IO改为系统调用关键的几个修改点老师上课的时候已经给出

    1是将定义的*file改变成fd然后标准I/O函数里的fopen换成系统调用的open

    2是将标准中的读取下一字符的fgets改变成系统调用的读取整个长度字符的read

    3是将标准中的关闭文件的fclose改变成关闭文件描述符close

    main函数:

    #include "head.h" 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h>
     #include <unistd.h> 
    #define SIZE 100
    int main(int argc,char *argv[]) {    
     int fd=open(argv[3],O_RDONLY,0);      
    char ch[SIZE];     
    int length = read(fd,&ch,SIZE);     
    close(fd);     
       
    ascii(ch,length);       
        
    return 0; }
    

    ASCII函数:

    #include "head.h"
    #define SIZE 100
    void ascii(char ch[], int length)
    {
        
        int a=0,b=0;
        
        while(length/16!= (b-1))
       {
        
        b++;
        
        for(a=16*(b-1);a<16*b;a++)
        {
            if(ch[a]=='
    ')
            {   a++;
                putchar(' ');
                printf("\n");
    
            }
            if(ch[a]=='')
            break;
            putchar(' ');
            printf("%c", ch[a]);
            putchar(' ');
        }
        printf("
    ");
        
        for(a=16*(b-1);a<16*b;a++)
            {
    
                if(ch[a]=="
    ")
                {   a++;
                    printf("%02x ",'
    ');
                }
                if(ch[a]=='')
                break;
                printf("%02x ",ch[a]);
            }
        printf("
    ");
        }
        
    }
    

    实验中遇到的问题及解决:

    开始时我的代码运行没有格式化输出,最后一个 对应的数值只有一个a,这与-od的输出方式是不符的,-od的显示是0a,于是我把最开始的printf("%3x")在前面添0改成了printf("%03x)于是变成了这副模样

    ,接着我改成了%02x又成了这个样子

    ,最后重新把前面的空格改正后才成功。

    项目二 学习教材第十章内容

    以读的方式打开一个已经存在的文件:fd=Open("foo.txt",O_RDONLY,0);

    打开一个已存在文件,并在后面添加一些数据:fd=Open("foo.txt",O_WDONLY|O_APPEND,0);

    O_RDONLY:只读

    O_WRONLY:只写

    O_RDWR:可读可写

    st_size成员包含了文件的字节数大小。st_mode成员则编码了文件访问许可位和文件类型。

    Unix I/O模型是在操作系统内核中实现的。应用程序可以通过诸如open、close、lseek、read、write和stat这样的函数来访问Unix I/O。较高级别的RIO和标准I/O函数都是基于Unix I/O来实现的。

    项目三 掌握两个重要命令:

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

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

    虚拟机中的运行截图:

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

    head的使用是显示打开文件的前10行内容而tail的使用是显示打开文件的后10行内容

    虚拟机中的测试:

    伪代码:

    主函数中命令行传入参数命令
    将数组及数组长度传入子函数
    利用循环遍历数组中的前(后)十行
    不是换行符则打印字符
    

    产品代码:
    head.h:

    	#ifndef HEAD_H
    	#define HEAD_H
    	#include <stdio.h>
    	#include <stdlib.h>
    	#include <string.h>
    	void HEAD(char text[], int length);
    	#endif
    

    main.c:

    #include "head.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #define SIZE 100
    int main(int argc,char *argv[])
    {
        int fd=open(argv[2],O_RDONLY,0); 
        char ch[SIZE];
        int length;
        length = read(fd,&ch,BUFFERSIZE);
        HEAD(ch,length);
        close(fd);
        return 0;
    }
    

    HEAD.c

    #include "head.h"
    
    void HEAD(char text[], int length)
    {
       int i,count=0;
        for(i=0;i<length,count<10;i++)
        {
            if (text[i]!='
    ') printf("%c",text[i]);
            else
                {
                    count++;
                    printf("
    ");
                }
        }
    }
    

    TAIL.c

    #include "head.h"
    
    void TAIL(char text[], int length)
    {
        int i , count = 0;
        int m=0
        for(i = length; i > 0, count < 10; i--)
    	{
            if(text[i]=='
    '){
                count++;
            }
        }
        for(m = i-1; m <= length; m++)
    	{
            printf("%c", text[m]);
        }
    }
  • 相关阅读:
    Centos7下thinkphp5.0环境配置
    win10蓝牙鼠标无法连接,需pin码
    thinkphp5自带workerman应用
    php文件加密(screw方式)
    centos修改ssh默认端口号的方法
    修改CentOS ll命令显示时间格式
    在线编辑器的原理简单示例
    [转载]提升SQLite数据插入效率低、速度慢的方法
    linux 客户机挂载vitualbox共享文件夹
    virtualbox linux客户机中安装增强功能包缺少kernel头文件问题解决
  • 原文地址:https://www.cnblogs.com/STILLlover521/p/7672990.html
Copyright © 2011-2022 走看看