实现mypwd-20175218

实现mypwd-20175218

1、要求:

  1. 学习pwd命令
  2. 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
  3. 实现mypwd
  4. 测试mypwd
  5. 提交过程博客的链接

2、完成过程

1.学习pwd命令

(一)pwd命令功能:

  • Linux中,pwd命令用于显示工作目录。
  • 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。

(二)查看参数:

  • 通过 man -k pwd 可以得知,可以使用 man 1 pwd 了解pwd的相关信息

  • 输入 man 1 pwd ,得知pwd的相关参数信息

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

  • 使用 man -k dir | grep 2 查看相关系统调用函数信息

  • 使用 man 2 chdir 查看chdir的相关信息。可知:int chdir(const char *path )---用于改变当前工作目录,调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。

  • 使用 man 2 getcwd 查看getcwd的相关信息。可知:getcwd(char *buf,size_t size)---将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数size为buf的空间大小

  • 使用 man 2 readdir 查看readdir的相关信息。可知:readdir(DIR* dir)---返回参数dir 目录流的下个目录进入点

通过上面所查看的信息,可以用getcwd()和readdir()来实现的伪代码,如下:

  • 对于getcwd():

    • 定义一个缓冲区数组buf[MAXPATH]
    • 调用getcwd(buf, MAXPATH)
    • 输出返回值即为路经
  • 对于readdir():

    • 通过特殊的文件名"."获取当前目录的inode-number
    • 通过特殊的文件名".."获取当前目录的上一级目录的inode-number
    • 判断当前目录和上一级目录的inode-number是否一样
    • 如果两个inode-number一样说明达到根目录,输出完整路径,退出程序
    • 如果两个inode-number不一样,切换至上一级目录,根据第一步获取的inode-number,在上一级目录中搜索对应的文件名并记录下来,然后重新回到第一步

3.实现mypwd

代码链接:

对于getcwd()即mypwd1.c

对于readdir()即mypwd2.c

4.测试mypwd

对于getcwd():

对于readdir():

3、代码托管

码云链接

4、参考资料

1、Linux命令速查手册

2、Linux命令详解之—pwd命令

原文地址:https://www.cnblogs.com/cjy-123/p/12026171.html