標籤:shell unix環境進階編程
思路:(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