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。

    六、码云链接

    七、运行结果截图

  • 相关阅读:
    Unique Binary Search Trees——LeetCode
    Binary Tree Inorder Traversal ——LeetCode
    Maximum Product Subarray——LeetCode
    Remove Linked List Elements——LeetCode
    Maximum Subarray——LeetCode
    Validate Binary Search Tree——LeetCode
    Swap Nodes in Pairs——LeetCode
    Find Minimum in Rotated Sorted Array——LeetCode
    Linked List Cycle——LeetCode
    VR AR MR
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/12038950.html
Copyright © 2011-2022 走看看