• Mypwd 的解读与实现 20155208


    Mypwd 的解读与实现 20155208

    linux下pwd命令的编写

    实验要求:

    1 、学习pwd命令

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

    3 、实现mypwd

    4 、测试mypwd

    对pwd的了解

    • 以绝对路径的方式显示用户当前工作目录,命令将当前目录的全路径名称(从根目录)写入标准输出, 全部目录使用/分隔,第一个/表示根目录, 最后一个/ 表示当前目录。 执行pwd 命令可以立刻知道目前所在的工作目录的绝对路径名称。
    • pwd--输出当前或者工作目录

    SYNOPSIS

    pwd [OPTION]

    DESCRIPRION

    输出当前工作目录的全文件名

    -help : 显示帮助信息

    -version : 输出帮助信息

    • 参数:

    -P: 查看当前目录的真实物理目录

    -L:查看当前目录的逻辑目录

    pwd的实现:

    1、由于在Linux/Unix文件系统中,每个文件对应的inode值都是唯一的。

    2、注意一点,chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录,这是不一样的。

    • 源代码:
    #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);  
    }

    运行成功截图:

    实验感想:

    这次的实验让我对pwd命令进行了更深层次的了解,懂得了他的使用原理,并且用C语言进行了实现,收获很多。

  • 相关阅读:
    wrap添加及去除外层dom的方法
    闭包作用域探究小例
    测试模型之W模型(脑图)
    软件测试模型之前置模型(脑图)
    软件测试模型之H模型(脑图)
    软件测试基础(脑图)
    测试模型之V模型(脑图)
    一个点型的rsyncd.conf内容
    rsync同步时报name lookup failed for name or service not known错误的解决方法
    ubuntu下的eclipse 3.3初用aptana报SWT错误
  • 原文地址:https://www.cnblogs.com/xuzihan/p/7856073.html
Copyright © 2020-2023  润新知