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

代码参考

码云链接

原文地址:https://www.cnblogs.com/hpl20155329/p/7847260.html