您的位置:首页 > 运维架构 > Shell

Shell命令编写——显示到达当前目录的路径pwd

2011-11-29 23:34 633 查看
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <string.h>

/*
* pwd功能:显示到达当前目录的路径
*
* pwd的算法:
* 得到"."的i-节点号,称其为n(使用stat)
* chdir..(使用chdir)
* 找到i-节点号n链接的名字(opendir,readdir,closedir)
*
* 重复直到到达树的顶端
*
* 1.顶端的判断
* 2.按顺序显示目录名字
*
*/

ino_t get_inode(char *);
void dir_to_name(ino_t,char[],int);
int print_dir(ino_t);

int main(){

print_dir(get_inode("."));
printf("\n");
return;

}

print_dir(ino_t this_inode){

ino_t my_inode;
char its_name[50];

/*到达树的顶端的条件*/
if(this_inode!=get_inode("..")){

chdir("..");
dir_to_name(this_inode,its_name,50);
my_inode = get_inode(".");
print_dir(my_inode);

printf("/%s",its_name);

}
}

/*
* get_inode(char *fname)
*
* 获取目录的i-节点号
*
*/
ino_t get_inode(char *fname){

struct stat info;

if((stat(fname,&info))==-1){
return 0;
}else{
return info.st_ino;
}

}

/*
* 输出当前目录的名称
*
*
*/
void dir_to_name(ino_t inode,char *namebuf,int len){

DIR *dir_ptr;
struct dirent *direntp;
char *fname = "..";

//打开目录
if((dir_ptr = opendir(fname))==NULL){
perror(".");
return;
}

//读取目录项
while((direntp = readdir(dir_ptr))!=NULL){
if(direntp->d_ino == inode){
strncpy(namebuf,direntp->d_name,len);
namebuf[len-1]='\0';

//关闭目录
closedir(dir_ptr);
return;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: