首页 > 其他分享 >mypwd

mypwd

时间:2022-10-23 19:55:25浏览次数:41  
标签:get buf inode num mypwd ino dir

通过查询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);

}

结果:

 见图片

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

相关文章

  • mypwd
    pwd命令语法pwd命令用于显示工作目录。执行pwd指令可立刻得知我们目前所在的工作目录的绝对路径名称。使用helppwd来查看pwd的功能   参数:-L:--logical......
  • mypwd
    目录学习任务1.学习pwd2.研究pwd实现需要的系统调用(man-k;grep),写出伪代码首先manpwd命令获取pwd命令的相关信息然后输入man-kdirectory|grep2得知getcwd()函......
  • 实现mypwd
    1、要求:1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd提交过程博客的链接2、过程:(1)学习pwd命令1:查看pwd命令的帮助信......
  • mypwd
    学习pwd命令该命令用来显示目前所在的工作目录。指令英文原义:printworkdirectory显示当前目录所在路径pwd显示当前目录的物理路径pwd研究pwd实现需要的系统调用(......
  • mypwd实现
    理解pwdpwd的作用是显示当前目录所在路径manpwd–P:显示当前目录的物理路径-L:显示当前目录的连接路径mypwd代码思路根据文件名获取文件的inode-numberstat()通过......
  • mypwd——C语言实现pwd
    学习pwdmanpwdpwd作用:输出当前目录的路径研究pwd实现需要的系统调用man-kdir|grep2伪代码利用getcwd读取目录的路径信息使用printf输出学习getcwdmanget......
  • mypwd学习笔记
    Mypwd1.学习pwd命令manpwd查询:pwd指令功能:Linuxpwd(英文全拼:printworkdirectory)命令用于显示工作目录。执行pwd指令可立刻得知您目前所在的工作目录的绝对路径......
  • mypwd的实现
    学习任务0推荐在openEuler中完成1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd提交过程博客的链接或截图1.学习pw......
  • 实现mypwd
    实验内容1.学习pwd命令2.研究pwd实现需要的系统调用(man-k;grep),写出伪代码3.实现mypwd4.测试mypwd实践过程学习pwd命令1.pwd命令功能Linux中,pwd命令用于显示工......
  • mypwd
    mypwd学习任务:0推荐在openEuler中完成1学习pwd命令2研究pwd实现需要的系统调用(man-k;grep),写出伪代码3实现mypwd4测试mypwd提交过程博客的链接或截图1.......