zoukankan      html  css  js  c++  java
  • 2017-2018-1 20155230 mypwd实现

    mypwd实现

    • 每个文件夹都有以".",".."为名的文件。首先记录“."所拥有的i-节点号,然后使用chdir向上进入父目录查找含有刚记录的节点号的入口记录其名称,然后循环到根目录(如果chdir后得到的节点号相同则是根目录)。
    • 也可以用getcwd函数直接实现pwd。
    #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('
    ');
        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);
        }
        while((direntp = readdir(dir_ptr)) != NULL)
        {
            if(direntp->d_ino == inode_to_find)
            {
                strncpy(namebuf,direntp->d_name,buflen);
                namebuf[buflen-1] = '';
                closedir( dir_ptr);
                return;
            }
        }
        fprintf( stderr , "error looking for inum % d
    " ,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第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)
    高级软件工程2017第1次作业
    2017高级软件工程 课程信息
    15061009-第0次作业(阅读与感想)
    新的開始!第一次作業
    软工实践第一次作业
    OO第四单元作业总结
    OO第二单元作业总结
    OO第一单元作业总结
    Dell BOSS 卡是什么
  • 原文地址:https://www.cnblogs.com/J1n233/p/7862145.html
Copyright © 2011-2022 走看看