linux下pwd命令的编写
来源:互联网 发布:铁路造价软件培训 编辑:程序博客网 时间:2024/05/26 09:55
ubuntu 14.04.2
目录的存储结构
每个目录下都至少有两个内容‘.’和’..’,其中‘.’代表当前目录,’..’代表上级目录。每个目录或文件都有对应的i-节点号,根目录的‘.’和’..’相同,所以i-节点号相同。通过命令’ls -1ia’(数字1,不是字母l)可以查看当前目录下的文件名和对应的i-节点号。
pwd的具体操作过程
概括来讲,就是:
1.找到本目录的i-节点
2.进入父目录,找到i-节点对应的文件名
3.循环以上过程,直到到达根目
代码实现
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>ino_t get_inode(char*);void printpathto(ino_t);void inum_to_name(ino_t,char*,int);int main(){ printpathto(get_inode(".")); //print path to here putchar('\n'); return 0;}void printpathto(ino_t this_inode){ ino_t my_inode; char its_name[BUFSIZ]; /*如果本目录的i-节点与上级目录不同,即本目录不是根目录*/ if (get_inode("..")!=this_inode) { chdir(".."); //进入上级目录 inum_to_name(this_inode,its_name,BUFSIZ); my_inode = get_inode("."); printpathto(my_inode); printf("/%s",its_name); }}void inum_to_name(ino_t inode_to_find,char* namebuf,int buflen) //找到i-节点对应的文件名,并放在字符数组里{ DIR* dir_ptr; struct dirent* direntp; dir_ptr = opendir("."); if (dir_ptr == NULL) { perror("."); exit(1); } /*下面这块每太搞明白,功能是寻找制定i-节点的目录,将目录名复制到namebuf中。 但是没明 白他是怎么寻找的*/ /*明白了,每次循环direntp都会指向下一个文件,详见testreaddir.c。 但这是怎么做到的呢?*/ 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 % d\n" ,inode_to_find); exit (1) ;}ino_t get_inode(char* fname) //根据文件名,返回-i节点{ struct stat info; if ( stat( fname, &info) == -1){ fprintf( stderr , "Cannot stat "); perror(fname); exit (1); } return info.st_ino;}
运行结果
一些函数的说明:
int result=stat(char* fname, struct stat* bufp);
stat把文件fname的信息复制到bufp所指的指针里
stat(statue的意思)结构体包含了文件的信息,在/user/include/sys/stat.h中可以看到struct stat的成员变量。
对readdir函数的测试
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>int main(){ DIR* dir_ptr; struct dirent* direntp; dir_ptr = opendir("."); while((direntp = readdir(dir_ptr)) != NULL) { printf("/%s\n",direntp->d_name); } closedir( dir_ptr); return 0;}
测试结果
参考文献《Unix/Linux编程实践教程》
遗留问题:为何每次循环使用readdir函数,每次返回的 struct dirent* 型指针都不相同?
0 0
- linux下pwd命令的编写
- linux下pwd命令
- Linux下pwd命令
- 自己写Linux下的pwd命令
- Linux下的 【pwd】 命令; 显示当前目录全路径。
- 在 Linux 下的 mkdir 、pwd、rm -r命令
- linux文件系统(pwd的编写)
- linux命令:pwd命令
- Linux命令的实现 -- ls pwd cd
- linux 操作系统中pwd命令的使用
- Linux:实现自己的pwd命令
- Linux命令之pwd
- Linux 命令之pwd
- Linux命令:pwd
- linux命令实现:pwd
- linux pwd命令详解
- linux命令-pwd
- Linux pwd 命令 【转载】
- 十进制负数转换为二进制、八进制、十六进制的知识分享
- 第九周项目三--分数类中的运算符重载(续)
- Windows Rootkit 技术分析
- 创建String对象
- 内连接、左外连接、右外连接区别
- linux下pwd命令的编写
- GDI与GDI+在RECT结构的区别
- 创建型模式-FactoryMethod ( 工厂方法 )
- caffe中增加自己的layer
- 'JAVAC' 不是内部或外部命令
- 逆序对的查找
- 写JAVA程序实现CPU使用率保持在50%(附加画正弦函数)
- Ubuntu samba安装服务器与图形管理界面
- 数据挖掘 学习路线(转)