zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175320 《信息安全系统设计基础》 myod-who-ls功能实现

    2019-2020-1 20175320 《信息安全系统设计基础》第十周学习总结

    一、教材学习内容总结

    本周内容为十章的内容的拓展,以实践为主,通过系统调用实现who、od以及ls -l的功能。在这一过程中,我们不仅要利用第十章中的系统I/O函数,还需要用到man帮助文档以及man -k XXX的查询命令。

    二、实践内容

    1、使用系统调用实现od命令

    要求:

    • 1 参考教材第十章内容
    • 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
    • 3 不要把代码都写入main函数中
    • 4 要分模块,不要把代码都写入一个.c中
    • 5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    由于Myod在上个学期的时候进行过实现,所以本次实践的关键在于如何使用Linux I/O 系统调用来实现od。要想实现Myod,首先需要将指定文件的内容读入到程序,在了解系统调用之前,我们可以使用fread函数来打开并读取文件中的内容,而结合第十章的内容以及man帮助文档,我们可以使用open以及read的系统调用来实现文件的打开以及读取,从而实现od -tx -tc的功能。由于不能将代码都写入main函数中,且不能只有一个c文件,我将程序分为两部分,并使用gcc main.c myod.c -o myod进行编译,运行结果如图所示:

    2、使用系统调用实现who命令

    在Linux中,who命令可以打印登陆用户以及登陆的时间,要实现who命令,我们可以先使用man who命令来查看who命令的描述。在who的帮助文档中,我们可以看出who命令使用了一个utmp文件,如图

    通过使用man帮助文档查看utmp,我们可以知道utmp是一个系统文件,且里面有一个utmp结构体,里面定义并存储了用户名,终端等信息。我们需要做的就是在程序中打开这个utmp文件,并将utmp结构体读出,再将其中我们需要的值输出。

    在前面我们通过man帮助文档找到了utmp文件的路径为/var/run/utmp通过该路径即可打开utmp文件,在老师提供的who代码中,我注意到老师使用了一个UTMP_FILE的宏定义,通过使用grep -nr UTMP_FILE /usr/include命令得知,该宏定义定义了utmp文件的路径。

    将教师提供的代码编译运行后,发现没有获得期望的输出,经过分析后我发现只需要输出用户信息,于是我使用ut_type对记录类型进行筛选,输出USER_PROCESS类型的记录,并对ut_time进行转换输出,得到的运行结果如下所示:

    3、使用系统调用实现ls -l命令

    由于ls命令的作用是输出当前目录下的目录以及文件信息,因此我们可以尝试使用man -k directory | grep read命令来寻找可以读取目录信息的函数或系统调用。


    通过查找后发现readdir函数可能符合我们的要求,通过man帮助文档查看该函数,发现函数返回一个dirent结构体,该结构体中有个d_name数组,里面存储了文件名。有了获得文件名的readdir函数,但输入该函数的参数是我们没有见过的DIR类型,这时我们可以下拉帮助文档,查看其中的相关函数,而相关函数中有一个opendir函数,通过man查看后发现,该函数的返回值正是DIR类型的参数。

    到这里我们已经可以在一定程度上实现ls的功能了接着按照相同的方法查询实现排序、分栏、筛选隐藏文件以及长形式输出的功能即可,运行结果如下:

    代码托管

    三、其他(感悟、思考等,可选)

    本周的实践内容想要实现起来还是比较困难的,有时知道即使是知道需要的功能,却不知道如何确定关键字,而查看帮助文档时,全英文的说明又对阅读造成了一定的困难,在寻找所需要的功能时需要花费一定的时间。

  • 相关阅读:
    Quick-Cocos2d-x Lua脚本加密打包器
    Memcached保存sessionId
    windows操作系统重装后恢复svn仓库、tortoisesvn客户端信息、及权限信息的方法
    Fedora 17 开启ssh服务
    Spring mvc从一个controller到另一个controller
    FreeMarker设置编码格式
    又被数据坑了
    设置文件属性--C#点滴积累
    SQL点滴积累4--字符串替换功能Stuff()
    SQL点滴积累3--detete 删除的目标表数据与其他表有关联关系
  • 原文地址:https://www.cnblogs.com/nameless-student/p/11827501.html
Copyright © 2011-2022 走看看