zoukankan      html  css  js  c++  java
  • 2019-2020-1 20175313 《信息安全系统设计基础》实现mypwd

    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。

    六、码云链接

    七、运行结果截图

  • 相关阅读:
    关于element-ui表格样式设置的方法cell-class-name
    Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例
    Bootstrap switch 切换状态踩坑
    字符串数组去重
    java效率取随机不重复数
    List 的add()与addAll()的区别
    在HTML中限制input 输入框只能输入纯数字
    抽象类继承接口
    IOC容器之Autofac
    浅拷贝和深拷贝
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/12038950.html
Copyright © 2011-2022 走看看