实现mypwd-20175218
实现mypwd-20175218
1、要求:
- 学习pwd命令
- 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
- 实现mypwd
- 测试mypwd
- 提交过程博客的链接
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
代码链接:
4.测试mypwd
对于getcwd():
对于readdir():