• 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的测试

    代码参考

    码云链接

  • 相关阅读:
    windows运行shell脚本
    Android Webview H5资源本地化
    Vscode开发Python环境安装
    Vscode开发Java环境搭建
    为什么索引可以提高效率?
    Java内存模型
    栈和队列----向有序的环形单链表中插入新节点
    栈和队列----单链表的选择排序
    栈和队列----将搜索二叉树转换成双向链表
    栈和队列----在单链表中删除指定值的节点
  • 原文地址:https://www.cnblogs.com/hpl20155329/p/7847260.html
Copyright © 2020-2023  润新知