实现mypwd
实现mypwd
内容要求
-
学习pwd命令
-
研究pwd实现需要的系统调用(man -k; grep),写出伪代码
-
实现mypwd
-
测试mypwd
pwd学习过程
-
使用
man -k pwd
查看使用说明,其简要介绍为pwd (1) - print name of current/working directory
,即为打印正在工作或最近的文件夹名
-
试输入命令
pwd
-
使用
man 1 pwd
查看具体使用方法
-
参数学习
-
pwd [-L]
如果 PWD 环境变量包含了不包含文件名 .(点)或 ..(点点)的当前目录的绝对路径名,则显示 PWD 环境变量的值。否则,-L 标志与 -P 标志一样运行。
-
pwd [-p]显示当前目录的绝对路径名。与 -P 标志一起显示的绝对路径不包含在路径名的绝对路径中涉及到符号链接类型的文件的名称。
-
研究pwd实现需要的系统调用(man -k; grep),写出伪代码
-
使用
man -k pwd
未发现任何系统调用 -
使用
man -k current directory | grep 2
以pwd的相关描述作为关键词进行查找,并筛选系统调用,查找到一个系统调用命令getcwd
和readdir
都很符合要求
-
使用
man -2 getcwd
命令查看具体使用方法
- 头文件及函数,其中getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size 为buf 的空间大小。
#include <unistd.h>
char *getcwd(char *buf, size_t size);
getcwd
伪代码
char *buf;
getcwd(buf,sizeof(buf));
prin(buf);
-
使用
man -2 readdir
命令查看具体使用方法
-
根据文档提示,使用
man 3 readdir
查看
- 头文件及函数
#include <direct.h>
struct dirent *readdir(DIR *dirp);
- 其中,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 */
};
实现pwd
#include "stdio.h"
#include "unistd.h"
int main(void)
{
char buf[256];
getcwd(buf,sizeof(buf));
printf("当前路径为:%s\n",buf);
return 0;
}