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


    课堂实践myod

    • 要求:
    1. 参考教材第十章内容

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

    运行截图:

    • 实践中遇到的问题:
    1. 运行出现错误提示:段错误(核心已转储)

    解决方法:

    1>使用demsg命令查看:dmesg 可以在应用程序崩溃时,显示内存中保存的相关信息。如下所示,通过 dmesg 命令可以查看发生段错误的程序名称、引起段错误发生的内存地址、指令指针地址、堆栈指针地址、错误代码、错误原因等。

    2>使用gdb调试

    找到错误出现在代码中定义buf变量的部分,对buf变量只定义为指针,没有对其存储空间具体限定,之后将char *buf改为
    char buf[1024]

    1. 运行程序后出现乱码

    解决方案:将代码中循环读取文件中的字符的条件while(read(fd,buf,16))改为
    while(read(fd,buf,16)!=0)

    课后练习:head、tail

    • head指令是用来查看文件内容的;例如:
      head -5 20155203.txt可以用来查看20155203.txt文件中的前五行

    • tail指令是用来查看文件的后几行代码以及文件的更新;
      tail -5 20155203.txt用来查看20155203.txt文件的后五行。

    • head.c伪代码

    int head()
    {
        对传入参数进行筛选和转换,参数由字符串转换为整型l。
        do
        {
            依次读取文件中字符c;
            输出字符c;
            得到c为回车符时,int i++;
            
        }while(i<l)
    }
    
    运行截图:

    • tail.c伪代码
    int tail()
    {
        通过函数lines得到文件行数
        对参数l的转换同head.c
        do
        {
            依次读取字符,读到'
    '即int j++;
            读到j=lines-l时输出读取字符
        }
    }
    
    运行截图:

    在编写tail.c时遇到了无法运行的问题。是在c文件编译运行通过后,只出现光标闪烁但是没有运行结果的问题,在上网查阅了fgetc()函数的具体内容后发现是用lines(FILE *file)函数统计行数后,光标移动到了文件的最后所以无法再次进行读取,之后对这一部分的代码进行了修改,在行数统计完成的同时关闭文件,并再次打开,这样的重复操作属于此次编写的一个问题,后续还会修改。

    课下实践的体会

    通过课下实践进一步理解了写指令实现代码的技巧,增加了对指令的了解以及思考。

    参考资料:
    如何查看linux指令源代码

  • 相关阅读:
    为何要对URL进行编码
    关于GreenPlum的一些整理
    Greenplum入门——基础知识、安装、常用函数
    PyGreSQL入门,pg模块,pgdb模块
    MySQL Test Suite使用
    MySQL到Greenplum迁移分析
    Method overrides should not change parameter defaults
    Why use a public method in an internal class?
    Git Submodules vs Git Subtrees
    To Allow App through Windows Defender Firewall in Command Prompt
  • 原文地址:https://www.cnblogs.com/xhwh/p/7657828.html
Copyright © 2020-2023  润新知