码迷,mamicode.com
首页 > 其他好文 > 详细

2019-2020-1 20175320 《信息安全系统设计基础》 myod-who-ls功能实现

时间:2019-11-11 09:28:59      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:com   调试过程   -o   direct   安全   directory   这一   就是   返回值   

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的功能了接着按照相同的方法查询实现排序、分栏、筛选隐藏文件以及长形式输出的功能即可,运行结果如下:
技术图片
代码托管

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

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

2019-2020-1 20175320 《信息安全系统设计基础》 myod-who-ls功能实现

标签:com   调试过程   -o   direct   安全   directory   这一   就是   返回值   

原文地址:https://www.cnblogs.com/nameless-student/p/11827501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!