zoukankan      html  css  js  c++  java
  • 20175202 Mypwd的学习和实现

    一、学习pwd命令:

    1.pwd命令的功能:

    Linux pwd命令用于显示工作目录。
    执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。

    2.参数:

    -L:--logical,显示当前的路径,有连接文件时,直接显示连接文件的路径,(不加参数时默认此方式),参考示例1。
    -p:--physical,显示当前的路径,有连接文件时,不使用连接路径,直接显示连接文件所指向的文件,参考示例2。 当包含多层连接文件时,显示连接文件最终指向的文件,参考示例3。
    --help:显示帮助信息。
    --version:显示版本信息。

    3.通过man -k pwd命令查找;

    4.通过man -k directory | grep 3命令查找库函数;


    发现readdiropendir以及getcwd

    5.通过man 3 readdir查找相应结构体;

    6.通过man 2 readlink命令查看帮助文档;


    如图可以找到例子,下面我们根据例子编写代码,来实现pwd

    二、实现和测试pwd

    1.实现pwd的代码:

    #include<stdio.h>  
    #include<sys/stat.h>  
    #include<dirent.h>  
    #include<stdlib.h>  
    #include<string.h>  
    #include<sys/types.h> 
    //获得文件的inode号
    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);  
    }
    //输出路径
    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 main()  
    {  
        printpath();  
        putchar('
    ');  
        return ;  
    }    
    

    2.pwd测试结果:

  • 相关阅读:
    SolarWinds Orion API 远程代码执行漏洞(CVE-2020-10148)
    Lanproxy 路径遍历漏洞 (CVE-2021-3019)
    公众号文章集合-2020整理回顾
    PHPMailer远程命令执行漏洞复现
    SaltStack Shell 注入 (CVE-2020-16846)漏洞
    (CVE-2020-7961)Liferay Portal RCE 反序列化命令执行漏洞
    (CVE-2020-17530)Struts2 S2-061 远程命令执行漏洞复现
    ora-01722 无效数字
    公开课平台推荐
    PL/SQL Developer如何导出数据成sql的insert语句
  • 原文地址:https://www.cnblogs.com/gexvyang/p/12045848.html
Copyright © 2011-2022 走看看