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

#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;
		}
	}
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值