首页 > 代码库 > 自己动手写shell命令之pwd
自己动手写shell命令之pwd
思路:(1)得到"."的i节点号,称其为n(使用stat)
(2)chdir ..(使用chdir)
(3)找到inode号为n的节点,得到其文件名。
重复上述操作直到当前目录“.”的inode值等于".."的inode值
#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(".")); printf("\n"); return 0; } ino_t get_inode(char * filename) { struct stat buffer; if(lstat(filename,&buffer) == -1) { perror("can't stat"); exit(1); } return buffer.st_ino; } void printpathto(ino_t ino) { ino_t ino_parent = get_inode(".."); if(ino_parent == ino) return; else { struct stat s; char buffer[255]; chdir(".."); inum_to_name(ino,buffer,255); printpathto(ino_parent); printf("/%s",buffer); } } void inum_to_name(ino_t ino,char * buffer,int buffer_length) { DIR * dir; struct dirent * direntp; struct stat stat_buffer; dir = opendir("."); if(dir == NULL) { perror("can't open dir ."); exit(1); } while((direntp = readdir(dir)) != NULL) { lstat(direntp->d_name,&stat_buffer); if(stat_buffer.st_ino == ino) { strncpy(buffer,direntp->d_name,buffer_length); buffer[buffer_length-1] = '\0'; closedir(dir); return; } } }
自己动手写shell命令之pwd
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。