2017-2018-1 20155230 mypwd实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-2018-1 20155230 mypwd实现相关的知识,希望对你有一定的参考价值。

mypwd实现

  • 实现步骤:

    1.找到本目录的i-节点 
    2.进入父目录,找到i-节点对应的文件名 
    3.循环以上过程,直到到达根目录
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <dirent.h>
    ino_t get_inode(char*);
    void printpathto(ino_t);
    void inum_to_name(ino_t,char*,int);
    int main()
    {
    printpathto(get_inode("."));  //print path to here
    putchar(‘\n‘);
    return 0;
    }
    void printpathto(ino_t this_inode)
    {
    ino_t my_inode;
    char its_name[BUFSIZ];
    /*如果本目录的i-节点与上级目录不同,即本目录不是根目录*/
    if (get_inode("..")!=this_inode)                                 
    {
        chdir("..");         //进入上级目录
        inum_to_name(this_inode,its_name,BUFSIZ);
        my_inode = get_inode(".");
        printpathto(my_inode);
        printf("/%s",its_name);
    }
    }
    void inum_to_name(ino_t inode_to_find,char* namebuf,int buflen)   //找到i-节点对应的文件名,并放在字符数组里
    {
    DIR* dir_ptr;
    struct dirent* direntp;
    dir_ptr = opendir(".");
    if (dir_ptr == NULL)
    {
        perror(".");
        exit(1);
    }
    /*下面这块每太搞明白,功能是寻找制定i-节点的目录,将目录名复制到namebuf中。
    但是没明 白他是怎么寻找的*/
    /*明白了,每次循环direntp都会指向下一个文件,详见testreaddir.c。
    但这是怎么做到的呢?*/
    while((direntp = readdir(dir_ptr)) != NULL)
    {
        if(direntp->d_ino == inode_to_find)
        {
            strncpy(namebuf,direntp->d_name,buflen);
            namebuf[buflen-1] = ‘\0‘;
            closedir( dir_ptr);
            return;
        }
    }
    fprintf( stderr , "error looking for inum % d\n" ,inode_to_find);
    exit (1) ;
    }
    ino_t get_inode(char* fname)            //根据文件名,返回-i节点
    {
    struct stat info;
    if ( stat( fname, &info) == -1){
        fprintf( stderr , "Cannot stat ");
        perror(fname);
        exit (1);
    }
    return info.st_ino;
    }

以上是关于2017-2018-1 20155230 mypwd实现的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-1 20155230 实验五 通讯协议设计

2017-2018-1 20155230《信息安全系统设计基础》第十一周学习总结

2017-2018-2 20155230《网络对抗技术》实验9:Web安全基础

2017-2018-2 20155230《网络对抗技术》实验4:恶意代码分析

20155230 《信息安全系统设计基础》课程总结

2017-2018-2 20155230《网络对抗技术》实验6:信息搜集与漏洞扫描