20155305mypwd的实现和测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("\\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);  
}  

技术分享图片





以上是关于20155305mypwd的实现和测试的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-1 20155305实验三 实时系统

实现mypwd

实现mypwd

实现mypwd

实现mypwd

2017-2018-1 20155214 《信息安全系统设计基础》 第9周课下测试-mypwd