20175202 Mypwd的学习和实现
一、学习pwd命令:
1.pwd命令的功能:
Linux pwd命令用于显示工作目录。
执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。
2.参数:
-L:--logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式),参考示例1。
-p:--physical,显示当前的路径,有连接文件时,不使用连接路径,直接显示连接文件所指向的文件,参考示例2。 当包含多层连接文件时,显示连接文件最终指向的文件,参考示例3。
--help:显示帮助信息。
--version:显示版本信息。
3.通过man -k pwd命令查找;

4.通过man -k directory | grep 3命令查找库函数;

发现readdir,opendir以及getcwd。
5.通过man 3 readdir查找相应结构体;

6.通过man 2 readlink命令查看帮助文档;

如图可以找到例子,下面我们根据例子编写代码,来实现pwd。
二、实现和测试pwd:
1.实现pwd的代码:
#include<stdio.h>
#include<sys/stat.h>
#include<dirent.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
//获得文件的inode号
int getinode(char *str)
{
struct stat st;
if(stat(str,&st) == -1){
perror(str);
exit(-1);
}
return st.st_ino;
}
//找到对应的文件名
char *inode_to_name(int inode)
{
char *str;
DIR *dirp;
struct dirent *dirt;
if((dirp = opendir(".")) == NULL){
perror(".");
exit(-1);
}
while((dirt = readdir(dirp)) != NULL)
{
if(dirt->d_ino == inode){
str = (char *)malloc(strlen(dirt->d_name)*sizeof(char));
strcpy(str,dirt->d_name);
return str;
}
}
perror(".");
exit(-1);
}
//输出路径
void printpath()
{
int inode,up_inode;
char *str;
inode = getinode(".");
up_inode = getinode("..");
chdir("..");
str = inode_to_name(inode);
if(inode == up_inode) {
// printf("/%s",str);
return;
}
printpath();
printf("/%s",str);
}
int main()
{
printpath();
putchar('\n');
return ;
}
2.pwd测试结果:

posted on 2019-12-15 20:49 20175202葛旭阳 阅读(173) 评论(0) 收藏 举报
浙公网安备 33010602011771号