编写 pwd
来源:互联网 发布:django 遍历数组前五个 编辑:程序博客网 时间:2024/05/26 09:53
程序思路:读取当前目录、一个目录接着一个目录地沿着树向上追踪,每步查看当前目录的i节点号,然后在父目录查找该i节点号的名字(目录名),直到到达目录树的顶端。
程序步骤:
得到当前目录(.目录)的i节点号。(该 i节点号称为 n)
切换到当前目录的父目录(..目录)。
找到i节点号n链接的目录名。
重复以上步骤,直到达到目录树。
判断是否到达目录树顶端(当 . 和 .. 的i节点相同时,就可以认为已经到达文件树的顶端)。
关于目录名字的显示:
第一种方法,建立一个循环,使用 strcat 或 sprintf 建立目录名字的字符串序列。
第二种办法,通过一个递归的程序逐步到达树的顶端来一个接一个的显示目录名。
示例代码:
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <stdlib.h>#include <string.h>// ino_t = unsigned long intino_t get_inode(char *);void printpathto(ino_t);void inum_to_name(ino_t , char *, int);int main(){ printpathto(get_inode(".")); putchar('\n'); return 0;}//打印以 this_inode 作为当前目录的绝对路径void printpathto(ino_t this_inode){ ino_t my_inode; char its_name[BUFSIZ]; //BUFSIZ = 8192 if(get_inode("..") != this_inode){ // 判断是否到达文件的顶端 chdir(".."); //改变工作目录,等同于 cd .. inum_to_name(this_inode,its_name,BUFSIZ); //将 this_inode 转换成名字 my_inode = get_inode("."); //获取节点号 printpathto(my_inode); //递归调用(新的节点) printf("/%s",its_name); // 这个目录的名字(当目录为顶层目录才执行) }}// 将 inode_to_find i节点转换成对应文件名。void inum_to_name(ino_t inode_to_find, char *namebuf, int buflen){ DIR *dir_ptr; struct dirent *direntp; dir_ptr = opendir("."); if(dir_ptr == NULL){ perror("."); exit(1); } while((direntp = readdir(dir_ptr)) != NULL) if(direntp->d_ino == inode_to_find){ strncpy(namebuf,direntp->d_name,buflen); namebuf[buflen - 1] = '\0'; closedir(dir_ptr); return ; } fprintf(stderr,"error looking for inum %ld\n",inode_to_find); exit(1);}//获取文件名对应的 i节点ino_t get_inode(char *fname){ struct stat info; if(stat(fname,&info) == -1){ fprintf(stderr,"Cannot stat "); perror(fname); exit(1); } return info.st_ino;}
0 0
- 编写 pwd
- linux下pwd命令的编写
- 【Unix/Linux编程实践】文件系统:编写pwd
- linux文件系统(pwd的编写)
- 第4章 文件系统:编写pwd
- pwd
- pwd
- pwd
- pwd
- pwd
- pwd
- PWD
- $PWD 和 $(pwd)
- Shell命令编写——显示到达当前目录的路径pwd
- 《unix/linux编程实践教程》学习笔记:第四章 文件系统:编写pwd
- pwd 命令
- pwd命令
- pwd命令
- 在apache上安装gitweb实现浏览器访问git服务器
- mysql存储过程断点dbForge Studio for MySQL工具使用
- Magical Record
- android 获取版本号的方法(非Activity 类下也可以)
- 解决easyui中重复调用$.messager.progress('close')报错问题
- 编写 pwd
- Arcengine 注册命令(command)
- Android studio导入工程
- 数据库分类概略
- 模块化利器: 一篇文章掌握RequireJS常用知识
- YII2.0配置index.php入口文件至根目录
- 这个 是不是 mysql的bug
- shrio教程初级(一)权限管理基础(必学)
- visual studio code