pwd的实现

任务要求:

1) 学习pwd命令

2) 研究pwd实现需要的系统调用(man -k; grep),写出伪代码

3) 实现mypwd

4) 测试mypwd

实现过程

1)首先查看是否有有用的命令,输入man -k directory|gerp 2

2)发现readdir好像符合我们的需求,输入man readdir查看详细资料

3)从详细资料中发现readdir符合我们的需求,这需要头文件#inlude<dirent.h>,并且readdir定义的是一个结构体,可知该函数返回一个dirent结构体指针,dirent结构体成员如下,

 struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* not an offset; see NOTES */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all filesystem types */
char d_name[256]; /* filename */
};

根据老师课上的内容可以知道,linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。根据在实现mypwd的过程中,我们需要用到文件的i节点,i节点跟文件的关系如下图

因此需要用到该返回值结构体中的ino_t型的d_ino,通过该返回值来打开我们所需要的文件,此外由于根节点的节点值与其父节点的节点值是一样的,因此可以通过这个条件来进行循环。

伪代码:

while(1)
{
获取当前目录的i节点值ci;
获取父级目录的i节点值pi;
if(ci==pi)判断是否到达根节点;
break;
else
打开至父级目录,根据获取的i节点值,在父级目录中搜索对应的文件名并记录下来;
输出文件名则为绝对路径; }
4)在读一个路径之前,我们需要打开这个路径,这就需要用到opendir函数,这个函数的原型是DIR *opendir(const char *name),需要的头文件是#include <sys/types.h> 和#include <dirent.h>
![](http://images2017.cnblogs.com/blog/1072918/201711/1072918-20171118230537515-1576166726.png) 5)除此之外,我们还需要知道文件的信息,这就要用到state,所需要的头文件是#include <sys/stat.h> #include <unistd.h>,使用ino_t来获取文件的节点 6)在查询到了当前文件夹名称后,需要返回父目录,重复此操作,这就需要用到chdir函数,他可以改变当前路径
![](http://images2017.cnblogs.com/blog/1072918/201711/1072918-20171118230544999-198471059.png) 7)之后就是不断地读取当前目录,并和父目录名称比对,如果当前目录和父目录的名称一致则跳出循环
## 完成结果 ![](http://images2017.cnblogs.com/blog/1072918/201711/1072918-20171118230554968-1338459308.png)

pwd的实现20155301的更多相关文章

  1. 20155301 Web基础

    20155301 Web基础 1.基础问题回答 (1)什么是表单 答: 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素 (2)浏 ...

  2. linux常用命令(2)pwd命令

    pwd 命令1 命令格式:pwd [选项]2 命令功能查看当前工作目录的完整路径3 常用参数一般不带任何参数如果目录是链接时:pwd -P 显示实际路径,而非使用链接路径4 常用实例:4.1 用pwd ...

  3. pwd命令

    [pwd]      打印当前的工作目录             pwd==print work director 命令格式: pwd [OPTION]... 命令功能: 打印当前工作目录的全路径 命 ...

  4. Linux命令学习总结:pwd命令

    命令简介: 该命令用来显示目前所在的工作目录.指令英文原义:print work directory 执行权限    :All User 指令所在路径:/usr/bin/pwd 或 /bin/pwd ...

  5. 每天一个linux命令(3):pwd命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  6. 【初级】linux pwd 命令详解及使用方法实战

    pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...

  7. linux命令(3):pwd命令

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...

  8. linux-11 基本命令之 -工作期目录切换命令-pwd,cd,

    pwd 命令用于显示当前的工作目录,格式为:pwd[选项] @1.查看当前的工作路径: [root@localhost /]# pwd cd 命令用于切换工作路径 格式为:"cd 目录名称& ...

  9. Linux2:vi、ls、cd、pwd、mkdir、rm、mv、cp、cat、tail

    前言 从本篇文章开始,每篇文章将写10个Linux命令,个人的写作想法是: 1.常用的Linux命令,那些生僻的.不常用的就不写了 2.从实际考虑,只列出每个命令常见的用法和参数选项,有兴趣了解进一步 ...

随机推荐

  1. 2.MyBatis 动态SQL

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

  2. 使用 PowerShell 创建和修改 ExpressRoute 线路

    开始之前 安装最新版本的 Azure Resource Manager PowerShell cmdlet. 有关详细信息,请参阅 Azure PowerShell 概述. 在开始配置之前,请查看先决 ...

  3. Linux内存管理(text、rodata、data、bss、stack&heap)

    一.各内存区段的介绍 系统内的程序分为程序段和数据段,具体又可细分为一下几个部分: (1)text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Fl ...

  4. MySQL binlog格式解析

    MySQL binlog格式解析   binlog想必大家都不陌生,在主从复制或者某些情况下的数据恢复会用到.由于binlog是二进制数据,要查看一般都借助mysqlbinlog工具.这篇笔记分析了b ...

  5. Allure 安装及使用

    linux下安装方法 Allure requires Java 8 or higher    npm install -g allure-commandline --save-dev (如果npm不能 ...

  6. 铁乐学python_day22_面向对象编程4

    以下内容大部分摘自博客http://www.cnblogs.com/Eva-J/ 封装 [封装]隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 将变化隔离: 便于使用: 提高复用性: 提 ...

  7. APP的案例分析

    很多同学有误解,软件项目管理是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课?都不对,软件项目管理有理论,有实践,更重要的是分析,思辨,总结. ...

  8. 3192: [JLOI2013]删除物品

    3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...

  9. 最新版的Chrome 69.0 设置始终开启flash而不是先询问

    ## 69.0 之前的版本 ##   1.打开 chrome://settings/content/flash   2.禁止网站运行Flash -> 改为“Ask (Default)”   3. ...

  10. 机器学习中的特征缩放(feature scaling)

    参考:https://blog.csdn.net/iterate7/article/details/78881562 在运用一些机器学习算法的时候不可避免地要对数据进行特征缩放(feature sca ...