• 2017-2018-1 20155215 《信息安全系统设计基础》 第4周课上实践


    课上实践

    1. 参考教材第十章内容

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

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

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

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

    6. 课上上传代码到码云

    od命令:

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

    • A 指定地址基数,包括:
      d 十进制
      o 八进制(系统默认值)
      x 十六进制
      n 不打印位移值
    • t 指定数据的显示格式,主要的参数有:
      c ASCII字符或反斜杠序列
      d 有符号十进制数
      f 浮点数
      o 八进制(系统默认值为02)
      u 无符号十进制数
      x 十六进制数
      除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数

    课堂上没完成的原因:

    我们已经完成了一个关于Myod的课后实践。这次又要用Linux IO相关系统调用来编写。但是我在课堂上的时候觉得还是不太理解系统调用的内容,就一直在学第十章,所以没有做出来。那张图是不小心交上去的。。。并不是那个的截图。
    课下我又认真学习了系统调用的知识,然后对之前那个myod进行了修改。

    遇到的问题:

    然后我重新调整了我的编译,直接写成了

    gcc *.c
    

    进行编译,结果就成功了。

    myod.txt

    运行结果如下:

    学习内容:

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

    man
    

    有一个

    -k
    

    选项,这个选项让你学习命令,编程时有了一个搜索引擎,可以举一反三。
    比如我需要一个排序功能的函数,我就可以输入

    man -k sort
    

    来查找。而

    man -k key1 | grep key2| grep 2
    

    就是多关键字查找的意思,用|分隔符分开,输入多个关键字达到更好的查找我想要的函数的目的。

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

    grep 命令可以对文件全文检索,比如你接手一个C语言项目,里面有上百个C源文件,想找找main函数在那个文件中,你可以通过

    grep -n main *.c
    

    ,快速找到main在哪个C文件中并指出在第几行。
    而且grep支持正则表达式,正则表达式也是一个重要的元知识。
    我们可以通过

    cheat grep
    

    来学习grep命令。

    grep -nr XXX /usr/include
    

    则是可以帮助我们查找XXX在哪个头文件中定义。

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

    • head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

    • 命令参数有:
      -q 隐藏文件名
      -v 显示文件名
      -c<字节> 显示字节数
      -n<行数> 显示的行数

    tail

    • 用于显示指定文件末尾内容至标准输出,默认tail命令打印其相应文件的末尾10行

    • 命令参数:
      -f 循环读取
      -q 不显示处理信息
      -v 显示详细的处理信息
      -c<数目> 显示的字节数
      -n<行数> 显示行数
      --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
      -q, --quiet, --silent 从不输出给出文件名的首部
      -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

    相关API的分析,伪代码,产品代码,测试代码的编写

    伪代码(Pseudocode)是一种算法描述语言。使用伪码的目的是使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java等)实现。以编程语言的书写形式指明算法职能。

    • head

    • 产品代码如下:

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>
    #include <unistd.h>
    
    int main( )
    {
    
        int fd,c=0;
        char ch;
        fd=open(argv[1],O_RDONLY,0);
        if(fd==-1)
        {
            printf("出现错误!");
            exit(1);
        }
        while(fd,&ch,1)
        {
            printf("%c",ch);
        }
        close(fd);
        exit(0);
    }
    
    • tail

    • 产品代码

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int main(int argc,char *argv[])
    {
    
        int fd1,fd2,c=0,n=0;
        char ch;
    
        fd1=open(argv[1],O_RDONLY,0);
        if(fd1==-1)
        {
            printf("出现错误!");
            exit(1);
        }
        while(read(fd1,&ch,1)!=0)
          {
              if(ch=='
    ') c++;
           }
        close(fd1);
    
        fd2=open(argv[1],O_RDONLY,0);
        while(fd2,&ch,1)
          {
              if(ch=='
    ') n++;
              if(n>=c-10)printf("%c",ch);
           }
    
        close(fd2);
        exit(0);
    }
    

    学习参考:

  • 相关阅读:
    Eclipse 重构功能的使用与重构快捷键
    Idea工具常用技巧总结
    Eclipse常用快捷键
    RabbitMQ的原理和使用
    总结消息队列RabbitMQ的基本用法
    rabbitmq常见运维命令和问题总结
    关于RabbitMQ关键性问题的总结
    Rabbit MQ 面试题相关
    RabbitMQ的使用总结
    史玉柱: 我的成功不是偶然(底下还有一堆相关链接)
  • 原文地址:https://www.cnblogs.com/xuanyan/p/7673735.html
Copyright © 2020-2023  润新知