mypwd

mypwd

学习任务:

0 推荐在openEuler中完成
1 学习pwd命令
2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
3 实现mypwd
4 测试mypwd

提交过程博客的链接或截图

1. 学习pwd命令

查询pwd功能,输入man pwd查询手册

2. 研究pwd实现需要的系统调用(man -k; grep),写出伪代码

输入man -k directory | grep 2查询与目录有关的系统调用

有结果可知,chdir、getcwd、readdir符合结果

打开readdir手册页

了解过后写出基于inode的伪代码:

while(未到根目录)
    {
      读取当前目录名称;
      打开父目录;
    }
printf(目录);

3. 实现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);
    }

4. 测试mypwd

操作截图:

posted @ 2022-10-22 12:01  少管我  阅读(16)  评论(0编辑  收藏  举报