自己动手写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; } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。