linux pwd指令C实现
linux pwd指令C实现
回顾课上内容
课程上半部分
- ls指令能做什么?怎样去做的。
- 使用ls命令查看目录内容,ls -l查看文件属性。
ls -l命令
- 显示当前工作目录下包含的文件的详细属性信息,分别是
- 文件属性-rwx rwx r-x 其中-代表没权限
- 文件硬连接数(一个文件的一个或多个文件名),或目录子目录数,目录的该字段至少是2
- 所有者
- 所属用户组
- 文件大小
- 文件最后修改时间
- 文件名
- 还有就是讲解了一下ls命令的C实现和相关系统调用
课程下半部分
- 上半部分的讲解是为下半节课的讲解,系统调用做一些铺垫。
- 主要内容是文件系统结构VFS
- 硬盘的抽象
- 从磁盘到分区,分区可看作是磁盘
- 从磁盘到序列块、块数组、字节数组
- 块数组到三个区域的划分(超级块、i-node\数据区)
Mypwd
涉及的相关系统调用
- 临近下课时老师给了一些提示,用到了chdir()这个系统调用。详情如下
- chdir()这个系统调用,是改变当前程序的工作目录,不是改变bash的工作目录
什么是目录
- 目录文件永远不会控,每个目录都至少包含两个特殊的项“.”“..”分别是当前目录和上一级目录
- 也是文件名和i-node的对应
伪代码
定义一个char数组用来保存当前目录的绝对路径;
递归调用:
调用内核函数```chdir()```来改变当前程序的工作路径;
if(返回的指针==NULL)
调用函数中存在错误,输出错误;
else
直接打印结果
pwd的实现(用递归实现)
主函数:
int main()
{
printpath();
putchar('\n');
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);
}