zoukankan      html  css  js  c++  java
  • 20155305mypwd的实现和测试

    20155305mypwd的实现和测试

    pwd命令及其功能

    • 命令格式:
    pwd 
    
    • 命令功能:
      查看”当前工作目录“的完整路径
    • 常用参数:
      一般情况下不带任何参数

    作业mypwd代码实现

    • 在课堂上老师讲解了目录其实也是一种文件,只不过这种文件比较特殊,它里面存储的是一张对应表,即文件名和i节点的对应关系表,而i节点才是记录此文件详细信息的结构,如文件大小,属性,权限,存在硬盘的那个块等。
      我们在一个目录创建文件就是在这张表里添加对应关系而已,使用某个文件时也是根据i节点确定在硬盘的实际存储位置的。
    #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("
    ");  
        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)] = '';  
                closedir(dir_ptr);  
                return ;  
            }  
        }  
        fprintf(stderr, "error looking for inode number %d
    ", (int)inode_num);  
        exit(1);  
    }  
    

  • 相关阅读:
    数据库表之间的联合查询
    c# 后台调前台的js
    oracle创建视图
    设置Crystal Report的FieldObject换行
    在XAML中转义大括号
    运行水晶报表报crdb_adoplus.dll不存在错误的解决方案
    网页面里动态添加linkbutton或者button
    正则表达式
    实现checkbox全选。html dom对象和jquery dom对象。
    手把手教你做关键词匹配项目(搜索引擎) 第二天
  • 原文地址:https://www.cnblogs.com/20155305ql/p/7859744.html
Copyright © 2011-2022 走看看