首页 > 其他分享 >mypwd

mypwd

时间:2022-10-22 12:12:46浏览次数:47  
标签:get buf inode num mypwd ino dir

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

操作截图:

标签:get,buf,inode,num,mypwd,ino,dir
From: https://www.cnblogs.com/weihehahaha/p/16815781.html

相关文章

  • mypwd
    pwd学习pwd相关参数-L:--logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式)-p:--physical,显示当前的路径,有连接文件时,不使用连接路径,直......
  • 实现mypwd
    实现mypwd1.学习pwdpwd指令功能:Linuxpwd命令用于显示工作目录。执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称1:查看pwd命令的帮助信息manpwd pwd......
  • mypwd
    实现mypwd任务列表推荐在openEuler中完成学习pwd命令研究pwd实现需要的系统调用(man-k;grep),写出伪代码实现mypwd测试mypwd1学习pwdLinuxpwd(英文全拼:print......
  • pwd——系统调用实现mypwd
    系统调用实现PWD命令目标1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd学习pwd命令Linuxpwd(英文全拼:printworkdir......
  • mypwd
    0推荐在openEuler中完成1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd1、学习pwd命令在终端中输入pwd--help得到......
  • mypwd的实现
    一、实验内容0推荐在openEuler中完成1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd二、学习pwd命令这个链接学习lin......
  • 实现mypwd
    mypwd实验环境:openeuler操作系统、ubuntu操作系统pwd命令学习pwd命令用于显示工作目录。执行pwd指令可立刻得知我们目前所在的工作目录的绝对路径名称。使用helppw......
  • mypwd
    0推荐在openEuler中完成1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd提交过程博客的链接或截图 1.学习pwd命令......