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

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

    项目一:课堂提交补充

    1. 参考教材第十章内容

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

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

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

    • 过程(直接改动myod)
    1. 是将定义的*file改变成fd然后标准I/O函数里的fopen换成系统调用的open

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

    3. 是将标准中的关闭文件的fclose改变成关闭文件描述符close
      查询了相应的man:

    • 运行截图:

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

    • 以读的方式打开一个已经存在的文件: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行内容

    • 虚拟机中的测试:

    • 伪代码:
    1. HEAD
    打开文件
    对传入参数进行筛选和转换,参数由字符串转换为整型l。
            依次读取文件中字符c;
            输出字符c;
            得到c为回车时, i++;
            关闭文件
    
    1. 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;
    
    }
    
    • 截图

    • 问题

  • 相关阅读:
    PLSQL登录弹出空白框如何解决
    mongodb常用命令
    js多线程?
    Rhino -- 基于java的javascript实现
    [原创]在Docker上部署mongodb分片副本集群。
    [原创]在Linux系统Ubuntu14.04上安装部署docker。
    [原创]Win7、Win8、Win10始终以管理员身份运行程序。
    [原创]WPF应用MediaPlayer播放声音断续、不全解决方案
    [原创]C#引用C++编译的dll
    [原创]导出CSV文件,特殊字符处理。
  • 原文地址:https://www.cnblogs.com/20155226thy/p/7674216.html
Copyright © 2011-2022 走看看