mypwd

通过查询man手册可知,pwd用于打印当前目录的整个路径名,即目录的绝对地址

 见图片

 

绝对路径:目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。完整的描述文件位置的路径就是绝对路径;

相对路径:相对于当前文件的路径;

LINUX系统中:

绝对路径:以/”为起始。例:/home/user1/abc.txt

相对路径为: home/user1/abc.txt

 

由于pwd与目录、路径有关,输入man -k directory |grep 2,查询与目录有关的系统调用;

 见图片

 

由查询结果可知有三个系统调用是可能符合结果的,分别进入对应man手册页进行查看:

 

 

chdir:改变当前所处目录

 

getcwd:获得当前所在目录路径

 

readdir:获得目录条目

 

Mypwd

    #include<stdio.h>

    #include<sys/stat.h>

    #include<sys/types.h>

    #include<dirent.h>

    #include<stdlib.h>

    #include<string.h>

 

    #define SIZE 128

 

    ino_t get_inode(char *dirname);

    void get_work_dir(ino_t inode_num);

    void inode_to_dirname(ino_t inode_num, char *buf, int buflen);

 

    int main(void)

    {

        get_work_dir(get_inode("."));   

        printf("\n");

        return 0;

 

    }

 

    ino_t get_inode(char *dirname)

    {

        struct stat info;

        if (stat(dirname, &info) == -1)

        {

            perror("dirname");

            exit(1);

        }

 

        return info.st_ino;

    }

 

    void get_work_dir(ino_t inode_num)

    {

        ino_t parent_inode;

        char buf[SIZE];

        if (get_inode("..") != inode_num)

        {

            chdir("..");

            inode_to_dirname(inode_num, buf, SIZE);

            parent_inode = get_inode(".");

            get_work_dir(parent_inode);

            printf("/%s", buf);

        }

    }

 

    void inode_to_dirname(ino_t inode_num, char *buf,int buflen)

    {

        DIR *dir_ptr;

        struct dirent *dire;

        if ((dir_ptr = opendir(".")) == NULL)

        {

            perror(".");

            exit(1);

        }

 

        while ((dire = readdir(dir_ptr)) != NULL)

        {

            if (dire->d_ino == inode_num)

            {

                strncpy(buf, dire->d_name, buflen);

                buf[strlen(buf)] = '\0';

                closedir(dir_ptr);

                return ;

            }

        }

        fprintf(stderr, "error looking for inode number %d\n", (int)inode_num);

        exit(1);

}

结果:

 见图片

posted @ 2022-10-23 19:49  20201214罗云帆  阅读(17)  评论(0编辑  收藏  举报