首页 > 其他 > 详细

2019-2020-1 20175313 《信息安全系统设计基础》实现mypwd

时间:2019-12-14 15:10:17      阅读:119      评论:0      收藏:0      [点我收藏+]

MyPWD

一、题目要求

  1. 学习pwd命令
  2. 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
  3. 实现mypwd
  4. 测试mypwd

二、题目理解

Linux下pwd的功能:在命令行输入man pwd进行查看:

技术分享图片

  1. 命令格式:pwd [选项]
  2. 命令功能:
    查看”当前工作目录“的完整路径
  3. 常用参数:
  • -L 目录连接链接时,输出连接路径。(不加参数时默认此方式)。
  • -P 输出物理路径。有连接文件时,不使用连接路径,直接显示连接文件所指向的文件;当包含多层连接文件时,显示连接文件最终指向的文件。

三、需求分析

  • 找到绝对路径,将其输出

四、设计思路

  • 问题1:如何获取文件路径?
  • 解决方法:输入man -k dir | grep 2,查看:

技术分享图片

  • 首先,使用opendir()函数打开当前文件;
  • 其次,使用getcwd()函数返回文件当前路径;

getcwd():getcwd(char *buf,size_t size)
将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数size为buf的空间大小
技术分享图片
技术分享图片

  • 问题2:如何调到上一级文件路径,并修改所记录的当前文件路径?
  • 解决方法:使用readdir()函数获取当前目录的父级目录,使用chdir()改变所记录的当前文件路径;

readdir():readdir(DIR* dir)返回参数dir、目录流的下个目录进入点
技术分享图片

chdir():int chdir(const char *path )用于改变当前工作目录,调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。
技术分享图片

  • 问题3:如何找到一个文件的绝对路径?
  • 解决方法:从叶子节点往根节点进行搜索,当父节点与当前节点相同时,该节点即为根节点,说明搜索到头了,然后逆序输出路径即为一个文件的绝对路径。

五、伪代码分析

  • opendir();
  • 定义一个缓冲区数组buf[MAXPATH]; 调用getcwd(buf, MAXPATH); 输出返回值即为路经;
  • 通过特殊的文件名"."获取当前目录的inode-number(假设当前目录为a) ;
  • 通过特殊的文件名".."获取当前目录的父级目录的inode-number - 判断当前目录和上级目录的inode-number是否一样;
  • 如果两个inode-number一样说明达到根目录,输出完整路径,退出程序;
  • 如果两个inode-number不一样,切换至父级目录,根据步骤1获取的inode-number,在父级目录中搜索对应的文件名并记录下来,然后重新回到步骤3。

六、码云链接

七、运行结果截图

技术分享图片

2019-2020-1 20175313 《信息安全系统设计基础》实现mypwd

原文:https://www.cnblogs.com/xiannvyeye/p/12038950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!