• 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。

    六、码云链接

    七、运行结果截图

  • 相关阅读:
    《Python自动化运维:技术与最佳实践》
    舍本求末的运维自动化技术热潮
    Policy Gradients
    Machine Learning Notes Ⅵ
    Machine Learning Notes Ⅴ
    Machine Learning Notes Ⅳ
    Machine Learning Notes Ⅲ
    Machine Learning Notes Ⅱ
    Machine Learning Notes Ⅰ
    在Linux系统中如何把文件拷贝到U盘
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/12038950.html
Copyright © 2020-2023  润新知