20165232 实现pwd

Posted heyanda

tags:

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

20165232 实现mypwd

题目要求

  1. 学习pwd命令
  2. 研究pwd实现需要的系统调用(man -k; grep),写出伪代码
  3. 实现mypwd
  4. 测试mypwd

学习pwd命令

  • 用man pwd 查看帮助文档
    技术分享图片
  • 显示当前目录所在路径 pwd
  • 显示当前目录的物理路径 pwd –P
  • 显示当前目录的连接路径:pwd -L

2.研究pwd实现需要的系统调用(man -k; grep),写出伪代码

技术分享图片

man-k directory | grep 2
{
    getinode(".");获取当前目录节点
    getinode(".."); 获取父目录节点
    记录当前节点的目录名;
    只有当inode == up_inode时,打印。
}

3.实现pwd命令

代码

#include<stdio.h>  
#include<sys/stat.h>  
#include<dirent.h>  
#include<stdlib.h>  
#include<string.h>  
#include<sys/types.h>  
void printpath();  
char *inode_to_name(int);  
int getinode(char *);  
int main()  
{  
    printpath();  
    putchar(‘
‘);  
    return ;  
}  
void printpath()  
{  
    int inode,up_inode;  
    char *str;  
    inode = getinode(".");  
    up_inode = getinode("..");  
    chdir("..");  
    str = inode_to_name(inode);  
    if(inode == up_inode) {  
    //  printf("/%s",str);  
        return;  
    }  
    printpath();  
    printf("/%s",str);  
}  
int getinode(char *str)  
{  
    struct stat st;  
    if(stat(str,&st) == -1){  
        perror(str);  
        exit(-1);  
    }  
    return st.st_ino;  
}  
char *inode_to_name(int inode)  
{  
    char *str;  
    DIR *dirp;  
    struct dirent *dirt;  
    if((dirp = opendir(".")) == NULL){  
        perror(".");  
        exit(-1);  
    }  
    while((dirt = readdir(dirp)) != NULL)  
    {  
        if(dirt->d_ino == inode){  
            str = (char *)malloc(strlen(dirt->d_name)*sizeof(char));  
            strcpy(str,dirt->d_name);  
            return str;  
        }  
    }  
    perror(".");  
    exit(-1);  
}

技术分享图片


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

20165232 第二周学习总结

20165232 课下作业

20165232 第四周课后作业

2018-2019-2 网络对抗技术 20165232 Exp 9 Web安全基础

20165232 缓冲区溢出漏洞实验

20165232第4次实验《Android程序设计》实验报告