2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd
2017-12-09 16:42
369 查看
2017-2018-1 20155214 《信息安全系统设计基础》
第9周课下测试-mypwd(深入版)
题目要求:
1 学习pwd命令
2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
3 实现mypwd
4 测试mypwd
在第9周学习总结中,我直接调用了系统调用getcwd()输出当前绝对路径。这次我尝试用c语言实现它的功能。
函数原型
#include <unistd.h> char *getcwd(char *buf, size_t size);
getcwd () 函数将当前工作目录的绝对路径名复制到由 buf (长度大小) 指向的数组。
如果当前工作目录的绝对路径名 (包括终止的 null 字节) 的长度超过了大小字节, 则 null 为返回, errno 设置为 ERANGE;应用程序应检查此错误, 并在必要时分配较大的缓冲区。
相关函数
chdir()
将当前工作路径更改至函数输入字符串路径path
我决定看看pwd源码
找到week03下载的源码包coreutils,很幸运里面有pwd.c
源码流程很清晰,从主函数main中了解到,pwd共有3种函数来产生绝对路径:
1.logical_getcwd()
2.xgetcwd()
3.robust_getcwd()
具体函数分析
logical_getcwd()
作为pwd最主要的调用函数,logical_getcwd()写的很简练只有23行。简单的逻辑分析如下:line304: getenv()函数搜索环境列表以查找环境变量名称,并返回一个指向相应值字符串”PWD“的指针。 line310:用指针p修改wd line311-317 循环体退出条件为p为空,循环调用strstr(),作用为寻找父节点的指针 line320-321 返回判断条件,当当前wd节点与父节点为相同节点时,返回wd。
xgetcwd()
通过调用头文件xgetcwd.h获得
robust_getcwd()
当调用到该函数时,利用filename_start来储存绝对路径
line279: 用stat数组dot_sb储存父节点信息。 line281-289: 无限循环,循环体内调用find_dir_entry()进入父节点,当父节点为根节点```root_dev_ino```时,退出循环
mypwd
通过对以上源码的阅读,一般情况下实现logical_getcwd即可完成。源代码:
码云链接:
https://gitee.com/besti155214/BESTI.IS.ISSDB.20155214/commit/979d946a6e8249eee961e722c30398b7d00dd46f
相关文章推荐
- 2017-2018-1 20155214 《信息安全系统设计基础》 第9周学习总结
- 2017-2018-1 20155210 《信息安全系统设计基础》 实现mypwd
- 2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd
- 2017-2018-1 20155214 《信息安全系统设计基础》 第8周课下作业
- 2017-2018-1 20155214 《信息安全系统设计基础》 第5周学习总结
- 2017-2018-1 20155231 《信息安全系统设计基础》实现mypwd
- 2017-2018-1 20155214 《信息安全系统设计基础》 第7周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第11周学习总结
- 2017-2018-1 20155214 《信息安全系统设计基础》 第8周学习总结
- 2017-2018-1 20155338 《信息安全系统设计基础》 第二周课堂测试
- 2017-2018-1 20155214 《信息安全系统设计基础》实验三 并发程序
- 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
- 2017-2018-1 20155315 《信息安全系统设计基础》加分作业:实现mypwd
- 2017-2018-1 20155310 《信息安全系统设计基础》 实现mypwd
- 2017-2018-1 20155308 《信息安全系统设计基础》课堂第六章测试(补做)
- 2017-2018-1 《信息安全系统设计基础》课下测试错题汇总
- 2017-2018-1 20155317 《信息安全系统设计基础》课堂实践——实现mypwd
- 2017-2018-1 20155214 《信息安全系统设计基础》 第6周学习总结
- 2017-2018-1 20155327 《信息安全系统设计基础》课堂测试&课下作业
- 2017-2018-1 20155216 《信息安全系统设计基础》 实现mypwd