#include #include #include #include #include #include void do_something(ino_t); int main () { do_something(get_idode(".")); return 0; } void ino_t get_inode(char *path) { struct stat info; if (stat(path,&info) == -1) { printf("Cannot stat %s\n", path); exit(1); } return info.st_info; } void do_something (ino_t inode) { DIR * directory = NULL; struct dirent * entry = NULL; struct dirent * newEntry= NULL; ino_t current_dir; directory = opendir("."); entry = readdir(directory); current_dir = get_inode("."); if (entry->d_ino != inode) { printf ("(before)inode: %d\n", (int)inode); chdir(".."); do_something(entry->d_ino); if (-1 != inode) { printf ("inode: %d\n", (int)inode); printf ("dir: %d\n", (int)newEntry); newEntry= readdir(directory); while(newEntry && newEntry->d_ino != inode) { // printf("moving past %s\n", newEntry->d_name); newEntry= readdir(directory); } if (newEntry) printf("/%s\n", newEntry->d_name); } } closedir(directory); }