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命令查找库函数;


发现readdiropendir以及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葛旭阳  阅读(164)  评论(0编辑  收藏  举报

导航