zoukankan      html  css  js  c++  java
  • linux pwd指令C实现

    linux pwd指令C实现

    回顾课上内容

    课程上半部分

    • ls指令能做什么?怎样去做的。
    • 使用ls命令查看目录内容,ls -l查看文件属性。
    ls -l命令
    • 显示当前工作目录下包含的文件的详细属性信息,分别是
    1. 文件属性-rwx rwx r-x 其中-代表没权限
    2. 文件硬连接数(一个文件的一个或多个文件名),或目录子目录数,目录的该字段至少是2
    3. 所有者
    4. 所属用户组
    5. 文件大小
    6. 文件最后修改时间
    7. 文件名
    • 还有就是讲解了一下ls命令的C实现和相关系统调用

    课程下半部分

    • 上半部分的讲解是为下半节课的讲解,系统调用做一些铺垫。
    • 主要内容是文件系统结构VFS
    • 硬盘的抽象
    1. 从磁盘到分区,分区可看作是磁盘
    2. 从磁盘到序列块、块数组、字节数组
    3. 块数组到三个区域的划分(超级块、i-node数据区)

    Mypwd

    涉及的相关系统调用

    • 临近下课时老师给了一些提示,用到了chdir()这个系统调用。详情如下
    • chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录
    什么是目录
    • 目录文件永远不会控,每个目录都至少包含两个特殊的项“.”“..”分别是当前目录和上一级目录
    • 也是文件名和i-node的对应

    伪代码

     定义一个char数组用来保存当前目录的绝对路径;
     递归调用:
        调用内核函数```chdir()```来改变当前程序的工作路径;
        if(返回的指针==NULL)
            调用函数中存在错误,输出错误;
        else
            直接打印结果
    

    pwd的实现(用递归实现)

    主函数:
         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);  
    }  
    
    

    pwd的测试

    代码参考

    码云链接

  • 相关阅读:
    jquery判断复选框是否选中
    jquery验证网址格式
    jquery右下角返回顶部
    thinkphp分页格式的完全自定义,直接输入数字go到输入数字页
    textarea出现多余的空格
    html渐隐轮播
    linux 路由 route
    ansible 自动化运维工具
    数据库 group by 后其他列的取值
    linux 磁盘io高排查
  • 原文地址:https://www.cnblogs.com/hpl20155329/p/7847260.html
Copyright © 2011-2022 走看看