pwd的实现20155301
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>

5)除此之外,我们还需要知道文件的信息,这就要用到state,所需要的头文件是#include <sys/stat.h> #include <unistd.h>,使用ino_t来获取文件的节点
6)在查询到了当前文件夹名称后,需要返回父目录,重复此操作,这就需要用到chdir函数,他可以改变当前路径

7)之后就是不断地读取当前目录,并和父目录名称比对,如果当前目录和父目录的名称一致则跳出循环
## 完成结果

pwd的实现20155301的更多相关文章
- 20155301 Web基础
20155301 Web基础 1.基础问题回答 (1)什么是表单 答: 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素 (2)浏 ...
- linux常用命令(2)pwd命令
pwd 命令1 命令格式:pwd [选项]2 命令功能查看当前工作目录的完整路径3 常用参数一般不带任何参数如果目录是链接时:pwd -P 显示实际路径,而非使用链接路径4 常用实例:4.1 用pwd ...
- pwd命令
[pwd] 打印当前的工作目录 pwd==print work director 命令格式: pwd [OPTION]... 命令功能: 打印当前工作目录的全路径 命 ...
- Linux命令学习总结:pwd命令
命令简介: 该命令用来显示目前所在的工作目录.指令英文原义:print work directory 执行权限 :All User 指令所在路径:/usr/bin/pwd 或 /bin/pwd ...
- 每天一个linux命令(3):pwd命令
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...
- 【初级】linux pwd 命令详解及使用方法实战
pwd:查看当前工作目录 前言: Linux中用 pwd 命令来查看”当前工作目录“的完整路径,就是经常提及的所在目录,多用在生产环境多级目录中查看当前所在路径,使用此命令能给运维人员/操作人员带来很 ...
- linux命令(3):pwd命令
Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...
- linux-11 基本命令之 -工作期目录切换命令-pwd,cd,
pwd 命令用于显示当前的工作目录,格式为:pwd[选项] @1.查看当前的工作路径: [root@localhost /]# pwd cd 命令用于切换工作路径 格式为:"cd 目录名称& ...
- Linux2:vi、ls、cd、pwd、mkdir、rm、mv、cp、cat、tail
前言 从本篇文章开始,每篇文章将写10个Linux命令,个人的写作想法是: 1.常用的Linux命令,那些生僻的.不常用的就不写了 2.从实际考虑,只列出每个命令常见的用法和参数选项,有兴趣了解进一步 ...
随机推荐
- asp.net 對象圖解
- C++发展概述、优缺点及应用领域
个人观点(C++虽功能强大,但是底层还是调用C,C++为了吸引更多的C程序员,功能过于丰富且复杂,一定程度上反而降低了可编程的实用性.但是不可否认C++ 也是一门艺术.) C++是一门以C为基础发展而 ...
- REST Framework 的分页
分页: PageNumberPagination from rest_framework.pagination import PageNumberPagination 导入分页之后你要实例化分页这个对 ...
- [翻译] JTCalendar
JTCalendar JTCalendar is a calendar control for iOS easily customizable. JTCalendar 是一个很容易定制的日历的控件. ...
- 关于Tomcat端口出现的问题
=Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. Th ...
- 【错误记录】python logging日志打印俩次的原因
有一个原因是因为同一个handler被添加了俩次 applogger = loggerfactory.LoggerFactory.init_app_logger()perflogger = logge ...
- 新手指南:Linux上vi(vim)编辑器使用教程
vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩 ...
- Cent OS home下中文目录改成英文目录
如果安装了中文版的Cent OS之后,root目录和home目录下会出现中文的路径名,如“桌面”.“文档”.“图片”.“公共的”.“下载”.“音乐”.“视频”等目录,这样在命令行上操作十分的不方便,需 ...
- tbb静态库编译
源自Intel论坛 Jeff的方法https://software.intel.com/en-us/forums/intel-threading-building-blocks/topic/29779 ...
- memcached迁移方案——记一次memcached session服务的迁移
背景: (1)由于机房调整,需要迁移memcached: (2)需要在短期内迁移完成(一周以内): (3)该memcached 保存了用户的登录数据,非常重要,一旦出问题将导致大量的用户被踢出: (4 ...